diff --git a/.oebuild/env.yaml b/.oebuild/env.yaml index 19be36c2049185a8903f43ab459d20ccadf228ea..27623ad93eddf69692022c60d517b94167b99d2e 100644 --- a/.oebuild/env.yaml +++ b/.oebuild/env.yaml @@ -1 +1 @@ -docker_tag: latest +docker_tag: "latest" diff --git a/.oebuild/local.conf.sample b/.oebuild/local.conf.sample index 8f606dd576fd1f35afb7843fea2401d976092a6b..1da2f06c4c365d3f2218d9318130246eb5fb932a 100644 --- a/.oebuild/local.conf.sample +++ b/.oebuild/local.conf.sample @@ -294,7 +294,7 @@ OPENEULER_SP_DIR = "/usr1/openeuler/src" # the sysroot of native sdk of openeuler which contains all the native tools # used for building openeuler # -# OPENEULER_NATIVESDK_SYSROOT用于指向nativesdk工具目录 +# OPENEULER_NATIVESDK_SYSROOT points to the sysroot of prebuilt host tools OPENEULER_NATIVESDK_SYSROOT = "/opt/buildtools/nativesdk/sysroots/x86_64-pokysdk-linux" # openEuler cross toolchain dir diff --git a/.oebuild/manifest.yaml b/.oebuild/manifest.yaml index 10a1de271e014a7fee09b4854fba444b824e7a9e..d6a83cd0e050f88fd4d096a01a4a9243f7e08e73 100644 --- a/.oebuild/manifest.yaml +++ b/.oebuild/manifest.yaml @@ -128,7 +128,7 @@ manifest_list: version: 95ace15d4fc0be9153e1572eae4ea392f7835fba dsoftbus: remote_url: https://gitee.com/src-openeuler/dsoftbus.git - version: b02ef74415b5a76fc30454498e982da98f6cd465 + version: 861c7ba7e6906aa4c6059c362fd326bda640b0ea dsoftbus_standard: remote_url: https://gitee.com/openeuler/dsoftbus_standard.git version: e2669305d57d3874d8b14d3c439f974cd1f4258a @@ -191,7 +191,7 @@ manifest_list: version: 603b423090de124bbeb2126857b7a8b10cc0d016 glog: remote_url: https://gitee.com/src-openeuler/glog.git - version: 036df3dc807fba0bb0ead788c08933fcc7a9e080 + version: cbd825ec8b2698ef9f79f44dea31359b137c247c gmp: remote_url: https://gitee.com/src-openeuler/gmp.git version: bc19a0d64865b7077650946b4db2d042a36ba265 @@ -224,13 +224,16 @@ manifest_list: version: ea78389472c80faf5ed89e4ca85b0b38346c3b00 iSulad: remote_url: https://gitee.com/src-openeuler/iSulad.git - version: 0ce4ece0a105c5126b9c61dd27ea09169dea8733 + version: 306ba77f4c27fa355c49244dbdcc7ce726976990 icu: remote_url: https://gitee.com/src-openeuler/icu.git version: e44201c412b913fcfa1aafce1193c1fc8738705d initscripts: remote_url: https://gitee.com/src-openeuler/initscripts.git version: b00ce6e6fae8b23faa3afe997d5f20d4d9633f52 + intel-cmt-cat: + remote_url: https://gitee.com/src-openeuler/intel-cmt-cat.git + version: 3c1e9e70623fdc7735fb66251d858444039a4d46 iproute: remote_url: https://gitee.com/src-openeuler/iproute.git version: ff886598a528e9d5611af604ecf6eff2b9a337f3 @@ -260,7 +263,7 @@ manifest_list: version: b4bc5fe2481a8504ac03a11297177cfa4cd44c0e lcr: remote_url: https://gitee.com/src-openeuler/lcr.git - version: 48913b93c3892affc9d8276375c30e450bfb3a6d + version: 26787717d8334808e5819965daf0af89faea143b less: remote_url: https://gitee.com/src-openeuler/less.git version: eee22a20fd9ed5d46aed03ea0858c5900df03910 @@ -434,10 +437,10 @@ manifest_list: version: c10a5d9c96ec610c07379068e39d1e288e7499ae lxc: remote_url: https://gitee.com/src-openeuler/lxc.git - version: 06d775407d9c10fa53012f9d8b7428c871fc9170 + version: 841d4aeae1c9c33375c6e718776025a8e41479b6 lxcfs: remote_url: https://gitee.com/src-openeuler/lxcfs.git - version: cc132486e704893649aae2d7a5bce622f6a01995 + version: 065619baf9f24eccbeec5decd8dd92f2b8badcbe lua: remote_url: https://gitee.com/src-openeuler/lua.git version: 37f5c7182704871d7a288ee4652acdd7f31c4844 @@ -452,10 +455,10 @@ manifest_list: version: 6d99588db478ab56965bd2d8eba574e607353596 mcs: remote_url: https://gitee.com/openeuler/mcs.git - version: 827d9d177f0136fff3970abd3a5bbe0d715e7843 + version: e0fd83734f0d6aa7b96b44f1b6109cb7076a1638 mcs-x86: remote_url: https://gitee.com/openeuler/mcs.git - version: c17264f9892662c65e5789c65ca12302814e63b4 + version: 48559c5d8808b6d6c1c8cedbcad229f28697c6b7 mesa: remote_url: https://gitee.com/src-openeuler/mesa.git version: 373ca1e90c7c9a2b1a347c43f6fec4a7d5b80d8e @@ -782,7 +785,7 @@ manifest_list: version: 1d04472046d0225e013dd7e18c62dddf82025969 yocto-poky: remote_url: https://gitee.com/openeuler/yocto-poky.git - version: c890f784e4b8f897f2deb30233d4949d14241138 + version: 603b1062776bb70321f790db715ef51b305d52e0 yocto-pseudo: remote_url: https://gitee.com/src-openeuler/yocto-pseudo.git version: 3c4978a07fbb5a0c6288e77ae5b24ee33ddf34f9 @@ -797,7 +800,7 @@ manifest_list: version: 1bd03ae8e15c88c9bad864c65fa6b3998f3fa07f abseil-cpp: remote_url: https://gitee.com/src-openeuler/abseil-cpp.git - version: ce75f0e4db4fae3e01f3ee3e90e60bd5e887995f + version: 7ad8379ee13e1100f7f3fd43a4db6cba59daa30c nlohmann-json: remote_url: https://gitee.com/src-openeuler/nlohmann_json.git version: e17a35c1a6b85e774b266585c990650504bc8dee @@ -1283,7 +1286,7 @@ manifest_list: version: 0e145387346d6792062811b3aa05872a0dbedbd3 adwaita-icon-theme: remote_url: https://gitee.com/src-openeuler/adwaita-icon-theme.git - version: a91631b76d86688beb5b02a62df1c524a357a180 + version: 1ee730acd12707159765d7d4887b335f0e7c930a xwayland: remote_url: https://gitee.com/src-openeuler/xorg-x11-server-xwayland.git version: 7981cd8098774ac85ad49950f32f456724a5c9b0 @@ -1335,3 +1338,93 @@ manifest_list: haveged: remote_url: https://gitee.com/src-openeuler/haveged.git version: e3dceae4a22c85e64849e35cdd7c68484b60c41d + libmicrohttpd: + remote_url: https://gitee.com/src-openeuler/libmicrohttpd.git + version: 72a62fa321c517f3ce1c2401fe7252d8e67437be + mpfr: + remote_url: https://gitee.com/src-openeuler/mpfr.git + version: b35945420030a30dec08c27e43b1ec319b186e66 + mtd-utils: + remote_url: https://gitee.com/src-openeuler/mtd-utils.git + version: 78e00fa56de7f2db2b9aa4c9b7336b94ee5086ef + libmpc: + remote_url: https://gitee.com/src-openeuler/libmpc.git + version: dcf4a81785d42aa8b64de50dceb21b7e9211fb5a + ethercat-igh: + remote_url: https://gitee.com/src-openeuler/ethercat-igh.git + version: d117d0caba507895d0a8be5ade71f1b43fa470cb + libassuan: + remote_url: https://gitee.com/src-openeuler/libassuan.git + version: 5ee12099e292277314a83d27dcdd060c960bc89e + gpgme: + remote_url: https://gitee.com/src-openeuler/gpgme.git + version: 894e296acf4dbbfa7323331f5d48842045429ecc + libsolv: + remote_url: https://gitee.com/src-openeuler/libsolv.git + version: 1f43668bc40163548998777a6d700daa75539227 + hwdata: + remote_url: https://gitee.com/src-openeuler/hwdata.git + version: 6f92f585fc2744c37b3abde9e5bf56dbf2a72d10 + glm: + remote_url: https://gitee.com/src-openeuler/glm.git + version: 7c3237285c7e945da7c78461d78962c9a78ab746 + libsigcpp20: + remote_url: https://gitee.com/src-openeuler/libsigcpp20.git + version: f9fa299fb3b8a647cd573a46eaa63576fa956475 + glibmm24: + remote_url: https://gitee.com/src-openeuler/glibmm24.git + version: b179d71eca58f243da58fc269c3b61a201e63112 + atkmm: + remote_url: https://gitee.com/src-openeuler/atkmm.git + version: 5bb30032e54ab8368b0d3d43f99a5873393d21d2 + pangomm: + remote_url: https://gitee.com/src-openeuler/pangomm.git + version: e5a62ddd4e9dc1228d5d27924b38b29e4e88001a + mm-common: + remote_url: https://gitee.com/src-openeuler/mm-common.git + version: abdd168a786f299ed4655baa7227c8b4b90dddaa + cairomm: + remote_url: https://gitee.com/src-openeuler/cairomm.git + version: adf7b59a73bc2d820fa64111b047990a7b1ffc72 + gtkmm30: + remote_url: https://gitee.com/src-openeuler/gtkmm30.git + version: d1e749193ddcbad38de84a528afc8b9cf3c79491 + libnotify: + remote_url: https://gitee.com/src-openeuler/libnotify.git + version: f994b0168987c86e1e22828ef44ac9caf64c45ee + libsndfile: + remote_url: https://gitee.com/src-openeuler/libsndfile.git + version: 2c188fdb977c9632399d72b8681d800729859fe3 + speexdsp: + remote_url: https://gitee.com/src-openeuler/speexdsp.git + version: 069140dc6312cad52482667711c0b43a342e7684 + sbc: + remote_url: https://gitee.com/src-openeuler/sbc.git + version: 4b56de87403be1d718c857f7ae21575eec0de402 + pulseaudio: + remote_url: https://gitee.com/src-openeuler/pulseaudio.git + version: d0c539133bc35b389b09f37eb2dde6075afa0c9f + kylin-wayland-compositor: + remote_url: https://gitee.com/openkylin/kylin-wayland-compositor.git + version: e9999782ed5d219456f3dcacbc1b04448aceb2e8 + libfm: + remote_url: https://gitee.com/src-openeuler/libfm.git + version: ec9580a527cf770aad65d520cac56ad243256999 + menu-cache: + remote_url: https://gitee.com/src-openeuler/menu-cache.git + version: e4948f34fe11783f8a586bc3ea889394d36eae60 + pcmanfm: + remote_url: https://gitee.com/src-openeuler/pcmanfm.git + version: 6dc9453636c85242e9934a966229f62c03727ff2 + lxterminal: + remote_url: https://gitee.com/src-openeuler/lxterminal.git + version: 61f12b627ca6b2090b38f671b9232aab12aba883 + startup-notification: + remote_url: https://gitee.com/src-openeuler/startup-notification.git + version: f5b7d863b7047cb66e3fb9d91c4be7add0baf08d + lxtask: + remote_url: https://gitee.com/src-openeuler/lxtask.git + version: 154aac326c977382bf79d9325417db928d06bee9 + libmodulemd: + remote_url: https://gitee.com/src-openeuler/libmodulemd.git + version: 12d250eb89accacc62bd609170bbd356e78c2ecd diff --git a/.oebuild/workflows/ci.yaml b/.oebuild/workflows/ci.yaml index ad2ad1ce87cb0525ba5a18f046838a29b13f5797..fa9dac371bd36cbd0b1c17d434ad774be322a794 100644 --- a/.oebuild/workflows/ci.yaml +++ b/.oebuild/workflows/ci.yaml @@ -37,14 +37,14 @@ build_list: - target: openeuler-image - target: openeuler-image -c do_populate_sdk ########################################## -# - name: raspberrypi4-64-ros -# platform: raspberrypi4-64 -# directory: raspberrypi4-64-ros -# feature: -# - name: openeuler-ros -# bitbake: -# - target: openeuler-image-ros -# - target: openeuler-image-ros -c do_populate_sdk + - name: raspberrypi4-64-ros + platform: raspberrypi4-64 + directory: raspberrypi4-64-ros + feature: + - name: openeuler-ros + bitbake: + - target: openeuler-image-ros + - target: openeuler-image-ros -c do_populate_sdk ########################################## - name: raspberrypi4-64-qt platform: raspberrypi4-64 diff --git a/.oebuild/workflows/jenkinsfile_ci b/.oebuild/workflows/jenkinsfile_ci new file mode 100644 index 0000000000000000000000000000000000000000..f7969c778c77ead294bbab91327f262d3b418b9a --- /dev/null +++ b/.oebuild/workflows/jenkinsfile_ci @@ -0,0 +1,741 @@ +def downloadEmbeddedCI(String remote_url, String branch){ + sh 'rm -rf embedded-ci' + sh "git clone ${remote_url} -b ${branch} -v embedded-ci --depth=1" +} + +def downloadYoctoWithBranch(String workspace, String namespace, String repo, String branch, Integer deepth){ + sh """ + python3 main.py clone_repo \ + -w ${workspace} \ + -r https://gitee.com/${namespace}/${repo} \ + -p ${repo} \ + -v ${branch} \ + -dp ${deepth} + """ +} + +def formatRes(String name, String action, String check_res, String log_path){ + return sh (script: """ + python3 main.py serial \ + -c name=${name} \ + -c action=${action} \ + -c result=${check_res} \ + -c log_path=${log_path} + """, returnStdout: true).trim() +} + +def getRandomStr(){ + return sh(script: """ + cat /proc/sys/kernel/random/uuid + """, returnStdout: true).trim() +} + +def mkdirOpeneulerLog(){ + def logdir = "openeuler/log" + sh "mkdir -p $logdir" + return logdir +} + +def getNowDatetime(){ + return sh(script: """ + date "+%Y%m%d%H%M%S" + """, returnStdout: true).trim() +} + +def uploadImageWithKey(String remote_ip, String remote_dir, String username, String remote_key, String local_dir){ + sh """ + python3 main.py put_remote \ + -i $remote_ip \ + -e $remote_dir \ + -u $username \ + -k $remote_key \ + -ld $local_dir \ + -sign + """ +} + +def STAGES_RES = [] + +def IMAGE_DATE = "" + +def IS_FAILD = false + +pipeline { + agent { node "${node}" } + environment { + PATH = "/home/jenkins/.local/bin:${env.PATH}" + } + stages { + stage("init task"){ + steps{ + dir('/home/jenkins/agent'){ + script{ + downloadEmbeddedCI(embeddedRemote, embeddedBranch) + IMAGE_DATE = getNowDatetime() + } + } + } + } + stage("build task"){ + parallel { + stage("qemu_aarch64"){ + agent { node "${node}" } + steps { + dir('/home/jenkins/agent'){ + script{ + downloadEmbeddedCI(embeddedRemote, embeddedBranch) + } + } + dir('/home/jenkins/agent/embedded-ci'){ + script{ + withCredentials([ + file(credentialsId: remoteID, variable: 'remoteKey') + ]){ + // 执行qemu_aarch64编译 + // 下载yocto源码 + downloadYoctoWithBranch("/home/jenkins/agent", repoNamespace, repoName, ciBranch, 1) + def randomStr = getRandomStr() + def logDir = mkdirOpeneulerLog() + // 对构建命令进行base64编码 + def imageCmd = sh (script: """ + python3 main.py serial string openeuler-image + """, returnStdout:true).trim() + def imageCmdSdk = sh (script: """ + python3 main.py serial string openeuler-image -c do_populate_sdk + """, returnStdout:true).trim() + // 执行镜像编译检查 + def task_res_code = sh (script: """ + python3 main.py build \ + -c /home/jenkins/agent/yocto-meta-openeuler \ + -target openeuler_image \ + -a aarch64 \ + -t /usr1/openeuler/gcc/openeuler_gcc_arm64le \ + -p qemu-aarch64 \ + -ic $imageCmd \ + -ic $imageCmdSdk \ + -dt $IMAGE_DATE \ + -d qemu-aarch64 > ${logDir}/${randomStr}.log + """, returnStatus: true) + + def check_res = "" + if (task_res_code == 0){ + check_res = "success" + remote_dir = remoteDir+"/aarch64/qemu-aarch64" + local_dir = "~/oebuild_workspace/build/qemu-aarch64/output/${IMAGE_DATE}/" + uploadImageWithKey(remoteIP, remote_dir, remoteUname, remoteKey, local_dir) + }else{ + check_res = "failed" + IS_FAILD = true + } + // 对检查赋值 + archiveArtifacts "${logDir}/*.log" + STAGES_RES.push(formatRes("qemu_aarch64", "build", check_res, "artifact/${logDir}/${randomStr}.log")) + } + } + } + } + } + stage("qemu_ros"){ + agent { node "${node}" } + steps { + dir('/home/jenkins/agent'){ + script{ + downloadEmbeddedCI(embeddedRemote, embeddedBranch) + } + } + dir('/home/jenkins/agent/embedded-ci'){ + script{ + withCredentials([ + file(credentialsId: remoteID, variable: 'remoteKey') + ]){ + // 执行qemu_aarch64编译 + // 下载yocto源码 + downloadYoctoWithBranch("/home/jenkins/agent", repoNamespace, repoName, ciBranch, 1) + def randomStr = getRandomStr() + def logDir = mkdirOpeneulerLog() + // 对构建命令进行base64编码 + def imageCmd = sh (script: """ + python3 main.py serial string openeuler-image-ros + """, returnStdout:true).trim() + def imageCmdSdk = sh (script: """ + python3 main.py serial string openeuler-image-ros -c do_populate_sdk + """, returnStdout:true).trim() + // 执行镜像编译检查 + def task_res_code = sh (script: """ + python3 main.py build \ + -c /home/jenkins/agent/yocto-meta-openeuler \ + -target openeuler_image \ + -a aarch64 \ + -t /usr1/openeuler/gcc/openeuler_gcc_arm64le \ + -p qemu-aarch64 \ + -f openeuler-ros \ + -ic $imageCmd \ + -ic $imageCmdSdk \ + -dt $IMAGE_DATE \ + -d qemu-aarch64-ros > ${logDir}/${randomStr}.log + """, returnStatus: true) + + def check_res = "" + if (task_res_code == 0){ + check_res = "success" + remote_dir = remoteDir+"/aarch64/qemu-aarch64-ros" + local_dir = "~/oebuild_workspace/build/qemu-aarch64-ros/output/${IMAGE_DATE}/" + uploadImageWithKey(remoteIP, remote_dir, remoteUname, remoteKey, local_dir) + }else{ + check_res = "failed" + IS_FAILD = true + } + // 对检查赋值 + archiveArtifacts "${logDir}/*.log" + STAGES_RES.push(formatRes("qemu_aarch64_ros", "build", check_res, "artifact/${logDir}/${randomStr}.log")) + } + } + } + } + } + stage("raspberrypi4_64"){ + agent { node "${node}" } + steps { + dir('/home/jenkins/agent'){ + script{ + downloadEmbeddedCI(embeddedRemote, embeddedBranch) + } + } + dir('/home/jenkins/agent/embedded-ci'){ + script{ + withCredentials([ + file(credentialsId: remoteID, variable: 'remoteKey') + ]){ + // 执行qemu_aarch64编译 + // 下载yocto源码 + downloadYoctoWithBranch("/home/jenkins/agent", repoNamespace, repoName, ciBranch, 1) + def randomStr = getRandomStr() + def logDir = mkdirOpeneulerLog() + // 对构建命令进行base64编码 + def imageCmd = sh (script: """ + python3 main.py serial string openeuler-image + """, returnStdout:true).trim() + def imageCmdSdk = sh (script: """ + python3 main.py serial string openeuler-image -c do_populate_sdk + """, returnStdout:true).trim() + // 执行镜像编译检查 + def task_res_code = sh (script: """ + python3 main.py build \ + -c /home/jenkins/agent/yocto-meta-openeuler \ + -target openeuler_image \ + -a aarch64 \ + -t /usr1/openeuler/gcc/openeuler_gcc_arm64le \ + -p raspberrypi4-64 \ + -ic $imageCmd \ + -ic $imageCmdSdk \ + -dt $IMAGE_DATE \ + -d raspberrypi4-64 > ${logDir}/${randomStr}.log + """, returnStatus: true) + + def check_res = "" + if (task_res_code == 0){ + check_res = "success" + remote_dir = remoteDir+"/aarch64/raspberrypi4-64" + local_dir = "~/oebuild_workspace/build/raspberrypi4-64/output/${IMAGE_DATE}/" + uploadImageWithKey(remoteIP, remote_dir, remoteUname, remoteKey, local_dir) + }else{ + check_res = "failed" + IS_FAILD = true + } + // 对检查赋值 + archiveArtifacts "${logDir}/*.log" + STAGES_RES.push(formatRes("raspberrypi4_64", "build", check_res, "artifact/${logDir}/${randomStr}.log")) + } + } + } + } + } + stage("raspberrypi4_64_rt"){ + agent { node "${node}" } + steps { + dir('/home/jenkins/agent'){ + script{ + downloadEmbeddedCI(embeddedRemote, embeddedBranch) + } + } + dir('/home/jenkins/agent/embedded-ci'){ + script{ + withCredentials([ + file(credentialsId: remoteID, variable: 'remoteKey') + ]){ + // 执行qemu_aarch64编译 + // 下载yocto源码 + downloadYoctoWithBranch("/home/jenkins/agent", repoNamespace, repoName, ciBranch, 1) + def randomStr = getRandomStr() + def logDir = mkdirOpeneulerLog() + // 对构建命令进行base64编码 + def imageCmd = sh (script: """ + python3 main.py serial string openeuler-image + """, returnStdout:true).trim() + def imageCmdSdk = sh (script: """ + python3 main.py serial string openeuler-image -c do_populate_sdk + """, returnStdout:true).trim() + // 执行镜像编译检查 + def task_res_code = sh (script: """ + python3 main.py build \ + -c /home/jenkins/agent/yocto-meta-openeuler \ + -target openeuler_image \ + -a aarch64 \ + -t /usr1/openeuler/gcc/openeuler_gcc_arm64le \ + -p raspberrypi4-64 \ + -f openeuler-rt \ + -ic $imageCmd \ + -ic $imageCmdSdk \ + -dt $IMAGE_DATE \ + -d raspberrypi4-64-rt > ${logDir}/${randomStr}.log + """, returnStatus: true) + + def check_res = "" + if (task_res_code == 0){ + check_res = "success" + remote_dir = remoteDir+"/aarch64/raspberrypi4-64-rt" + local_dir = "~/oebuild_workspace/build/raspberrypi4-64-rt/output/${IMAGE_DATE}/" + uploadImageWithKey(remoteIP, remote_dir, remoteUname, remoteKey, local_dir) + }else{ + check_res = "failed" + IS_FAILD = true + } + // 对检查赋值 + archiveArtifacts "${logDir}/*.log" + STAGES_RES.push(formatRes("raspberrypi4_64_rt", "build", check_res, "artifact/${logDir}/${randomStr}.log")) + } + } + } + } + } + stage("raspberrypi4_64_ros"){ + agent { node "${node}" } + steps { + dir('/home/jenkins/agent'){ + script{ + downloadEmbeddedCI(embeddedRemote, embeddedBranch) + } + } + dir('/home/jenkins/agent/embedded-ci'){ + script{ + withCredentials([ + file(credentialsId: remoteID, variable: 'remoteKey') + ]){ + // 执行qemu_aarch64编译 + // 下载yocto源码 + downloadYoctoWithBranch("/home/jenkins/agent", repoNamespace, repoName, ciBranch, 1) + def randomStr = getRandomStr() + def logDir = mkdirOpeneulerLog() + // 对构建命令进行base64编码 + def imageCmd = sh (script: """ + python3 main.py serial string openeuler-image-ros + """, returnStdout:true).trim() + def imageCmdSdk = sh (script: """ + python3 main.py serial string openeuler-image-ros -c do_populate_sdk + """, returnStdout:true).trim() + // 执行镜像编译检查 + def task_res_code = sh (script: """ + python3 main.py build \ + -c /home/jenkins/agent/yocto-meta-openeuler \ + -target openeuler_image \ + -a aarch64 \ + -t /usr1/openeuler/gcc/openeuler_gcc_arm64le \ + -p raspberrypi4-64 \ + -f openeuler-ros \ + -ic $imageCmd \ + -ic $imageCmdSdk \ + -dt $IMAGE_DATE \ + -d raspberrypi4-64-ros > ${logDir}/${randomStr}.log + """, returnStatus: true) + + def check_res = "" + if (task_res_code == 0){ + check_res = "success" + remote_dir = remoteDir+"/aarch64/raspberrypi4-64-ros" + local_dir = "~/oebuild_workspace/build/raspberrypi4-64-ros/output/${IMAGE_DATE}/" + uploadImageWithKey(remoteIP, remote_dir, remoteUname, remoteKey, local_dir) + }else{ + check_res = "failed" + IS_FAILD = true + } + // 对检查赋值 + archiveArtifacts "${logDir}/*.log" + STAGES_RES.push(formatRes("raspberrypi4_64_ros", "build", check_res, "artifact/${logDir}/${randomStr}.log")) + } + } + } + } + } + stage("raspberrypi4_64_qt"){ + agent { node "${node}" } + steps { + dir('/home/jenkins/agent'){ + script{ + downloadEmbeddedCI(embeddedRemote, embeddedBranch) + } + } + dir('/home/jenkins/agent/embedded-ci'){ + script{ + withCredentials([ + file(credentialsId: remoteID, variable: 'remoteKey') + ]){ + // 执行qemu_aarch64编译 + // 下载yocto源码 + downloadYoctoWithBranch("/home/jenkins/agent", repoNamespace, repoName, ciBranch, 1) + def randomStr = getRandomStr() + def logDir = mkdirOpeneulerLog() + // 对构建命令进行base64编码 + def imageCmd = sh (script: """ + python3 main.py serial string openeuler-image + """, returnStdout:true).trim() + def imageCmdSdk = sh (script: """ + python3 main.py serial string openeuler-image -c do_populate_sdk + """, returnStdout:true).trim() + // 执行镜像编译检查 + def task_res_code = sh (script: """ + python3 main.py build \ + -c /home/jenkins/agent/yocto-meta-openeuler \ + -target openeuler_image \ + -a aarch64 \ + -t /usr1/openeuler/gcc/openeuler_gcc_arm64le \ + -p raspberrypi4-64 \ + -f openeuler-qt \ + -f systemd \ + -ic $imageCmd \ + -ic $imageCmdSdk \ + -dt $IMAGE_DATE \ + -d raspberrypi4-64-qt > ${logDir}/${randomStr}.log + """, returnStatus: true) + + def check_res = "" + if (task_res_code == 0){ + check_res = "success" + remote_dir = remoteDir+"/aarch64/raspberrypi4-64-qt" + local_dir = "~/oebuild_workspace/build/raspberrypi4-64-qt/output/${IMAGE_DATE}/" + uploadImageWithKey(remoteIP, remote_dir, remoteUname, remoteKey, local_dir) + }else{ + check_res = "failed" + IS_FAILD = true + } + // 对检查赋值 + archiveArtifacts "${logDir}/*.log" + STAGES_RES.push(formatRes("raspberrypi4_64_qt", "build", check_res, "artifact/${logDir}/${randomStr}.log")) + } + } + } + } + } + stage("ok3588"){ + agent { node "${node}" } + steps { + dir('/home/jenkins/agent'){ + script{ + downloadEmbeddedCI(embeddedRemote, embeddedBranch) + } + } + dir('/home/jenkins/agent/embedded-ci'){ + script{ + withCredentials([ + file(credentialsId: remoteID, variable: 'remoteKey') + ]){ + // 执行qemu_aarch64编译 + // 下载yocto源码 + downloadYoctoWithBranch("/home/jenkins/agent", repoNamespace, repoName, ciBranch, 1) + def randomStr = getRandomStr() + def logDir = mkdirOpeneulerLog() + // 对构建命令进行base64编码 + def imageCmd = sh (script: """ + python3 main.py serial string openeuler-image + """, returnStdout:true).trim() + def imageCmdSdk = sh (script: """ + python3 main.py serial string openeuler-image -c do_populate_sdk + """, returnStdout:true).trim() + // 执行镜像编译检查 + def task_res_code = sh (script: """ + python3 main.py build \ + -c /home/jenkins/agent/yocto-meta-openeuler \ + -target openeuler_image \ + -a aarch64 \ + -t /usr1/openeuler/gcc/openeuler_gcc_arm64le \ + -p ok3588 \ + -ic $imageCmd \ + -ic $imageCmdSdk \ + -dt $IMAGE_DATE \ + -d ok3588 > ${logDir}/${randomStr}.log + """, returnStatus: true) + + def check_res = "" + if (task_res_code == 0){ + check_res = "success" + remote_dir = remoteDir+"/aarch64/ok3588" + local_dir = "~/oebuild_workspace/build/ok3588/output/${IMAGE_DATE}/" + uploadImageWithKey(remoteIP, remote_dir, remoteUname, remoteKey, local_dir) + }else{ + check_res = "failed" + IS_FAILD = true + } + // 对检查赋值 + archiveArtifacts "${logDir}/*.log" + STAGES_RES.push(formatRes("ok3588", "build", check_res, "artifact/${logDir}/${randomStr}.log")) + } + } + } + } + } + stage("qemu_arm32"){ + agent { node "${node}" } + steps { + dir('/home/jenkins/agent'){ + script{ + downloadEmbeddedCI(embeddedRemote, embeddedBranch) + } + } + dir('/home/jenkins/agent/embedded-ci'){ + script{ + withCredentials([ + file(credentialsId: remoteID, variable: 'remoteKey') + ]){ + // 执行qemu_aarch64编译 + // 下载yocto源码 + downloadYoctoWithBranch("/home/jenkins/agent", repoNamespace, repoName, ciBranch, 1) + def randomStr = getRandomStr() + def logDir = mkdirOpeneulerLog() + // 对构建命令进行base64编码 + def imageCmd = sh (script: """ + python3 main.py serial string openeuler-image + """, returnStdout:true).trim() + def imageCmdSdk = sh (script: """ + python3 main.py serial string openeuler-image -c do_populate_sdk + """, returnStdout:true).trim() + // 执行镜像编译检查 + def task_res_code = sh (script: """ + python3 main.py build \ + -c /home/jenkins/agent/yocto-meta-openeuler \ + -target openeuler_image \ + -a arm32 \ + -t /usr1/openeuler/gcc/openeuler_gcc_arm32le \ + -p qemu-arm \ + -ic $imageCmd \ + -ic $imageCmdSdk \ + -dt $IMAGE_DATE \ + -d qemu-arm32 > ${logDir}/${randomStr}.log + """, returnStatus: true) + + def check_res = "" + if (task_res_code == 0){ + check_res = "success" + remote_dir = remoteDir+"/arm32/qemu-arm32" + local_dir = "~/oebuild_workspace/build/qemu-arm32/output/${IMAGE_DATE}/" + uploadImageWithKey(remoteIP, remote_dir, remoteUname, remoteKey, local_dir) + }else{ + check_res = "failed" + IS_FAILD = true + } + // 对检查赋值 + archiveArtifacts "${logDir}/*.log" + STAGES_RES.push(formatRes("qemu_arm32", "build", check_res, "artifact/${logDir}/${randomStr}.log")) + } + } + } + } + } + stage("x86_64"){ + agent { node "${node}" } + steps { + dir('/home/jenkins/agent'){ + script{ + downloadEmbeddedCI(embeddedRemote, embeddedBranch) + } + } + dir('/home/jenkins/agent/embedded-ci'){ + script{ + withCredentials([ + file(credentialsId: remoteID, variable: 'remoteKey') + ]){ + // 执行qemu_aarch64编译 + // 下载yocto源码 + downloadYoctoWithBranch("/home/jenkins/agent", repoNamespace, repoName, ciBranch, 1) + def randomStr = getRandomStr() + def logDir = mkdirOpeneulerLog() + // 对构建命令进行base64编码 + def imageCmd = sh (script: """ + python3 main.py serial string openeuler-image + """, returnStdout:true).trim() + def imageCmdSdk = sh (script: """ + python3 main.py serial string openeuler-image -c do_populate_sdk + """, returnStdout:true).trim() + // 执行镜像编译检查 + def task_res_code = sh (script: """ + python3 main.py build \ + -c /home/jenkins/agent/yocto-meta-openeuler \ + -target openeuler_image \ + -a x86-64 \ + -t /usr1/openeuler/gcc/openeuler_gcc_x86_64 \ + -p x86-64 \ + -ic $imageCmd \ + -ic $imageCmdSdk \ + -dt $IMAGE_DATE \ + -d x86-64 > ${logDir}/${randomStr}.log + """, returnStatus: true) + + def check_res = "" + if (task_res_code == 0){ + check_res = "success" + remote_dir = remoteDir+"/x86-64/x86-64" + local_dir = "~/oebuild_workspace/build/x86-64/output/${IMAGE_DATE}/" + uploadImageWithKey(remoteIP, remote_dir, remoteUname, remoteKey, local_dir) + }else{ + check_res = "failed" + IS_FAILD = true + } + // 对检查赋值 + archiveArtifacts "${logDir}/*.log" + STAGES_RES.push(formatRes("x86_64", "build", check_res, "artifact/${logDir}/${randomStr}.log")) + } + } + } + } + } + stage("x86_64_rt"){ + agent { node "${node}" } + steps { + dir('/home/jenkins/agent'){ + script{ + downloadEmbeddedCI(embeddedRemote, embeddedBranch) + } + } + dir('/home/jenkins/agent/embedded-ci'){ + script{ + withCredentials([ + file(credentialsId: remoteID, variable: 'remoteKey') + ]){ + // 执行qemu_aarch64编译 + // 下载yocto源码 + downloadYoctoWithBranch("/home/jenkins/agent", repoNamespace, repoName, ciBranch, 1) + def randomStr = getRandomStr() + def logDir = mkdirOpeneulerLog() + // 对构建命令进行base64编码 + def imageCmd = sh (script: """ + python3 main.py serial string openeuler-image + """, returnStdout:true).trim() + def imageCmdSdk = sh (script: """ + python3 main.py serial string openeuler-image -c do_populate_sdk + """, returnStdout:true).trim() + // 执行镜像编译检查 + def task_res_code = sh (script: """ + python3 main.py build \ + -c /home/jenkins/agent/yocto-meta-openeuler \ + -target openeuler_image \ + -a x86-64 \ + -t /usr1/openeuler/gcc/openeuler_gcc_x86_64 \ + -p x86-64 \ + -f openeuler-rt \ + -ic $imageCmd \ + -ic $imageCmdSdk \ + -dt $IMAGE_DATE \ + -d x86-64 > ${logDir}/${randomStr}.log + """, returnStatus: true) + + def check_res = "" + if (task_res_code == 0){ + check_res = "success" + remote_dir = remoteDir+"/x86-64/x86-64-rt" + local_dir = "~/oebuild_workspace/build/x86-64-rt/output/${IMAGE_DATE}/" + uploadImageWithKey(remoteIP, remote_dir, remoteUname, remoteKey, local_dir) + }else{ + check_res = "failed" + IS_FAILD = true + } + // 对检查赋值 + archiveArtifacts "${logDir}/*.log" + STAGES_RES.push(formatRes("x86_64_rt", "build", check_res, "artifact/${logDir}/${randomStr}.log")) + } + } + } + } + } + stage("qemu_riscv64"){ + agent { node "${node}" } + steps { + dir('/home/jenkins/agent'){ + script{ + downloadEmbeddedCI(embeddedRemote, embeddedBranch) + } + } + dir('/home/jenkins/agent/embedded-ci'){ + script{ + withCredentials([ + file(credentialsId: remoteID, variable: 'remoteKey') + ]){ + // 执行qemu_aarch64编译 + // 下载yocto源码 + downloadYoctoWithBranch("/home/jenkins/agent", repoNamespace, repoName, ciBranch, 1) + def randomStr = getRandomStr() + def logDir = mkdirOpeneulerLog() + // 对构建命令进行base64编码 + def imageCmd = sh (script: """ + python3 main.py serial string openeuler-image + """, returnStdout:true).trim() + def imageCmdSdk = sh (script: """ + python3 main.py serial string openeuler-image -c do_populate_sdk + """, returnStdout:true).trim() + // 执行镜像编译检查 + def task_res_code = sh (script: """ + python3 main.py build \ + -c /home/jenkins/agent/yocto-meta-openeuler \ + -target openeuler_image \ + -a riscv64 \ + -t /usr1/openeuler/gcc/openeuler_gcc_riscv64 \ + -p qemu-riscv64 \ + -ic $imageCmd \ + -ic $imageCmdSdk \ + -dt $IMAGE_DATE \ + -d qemu-riscv64 > ${logDir}/${randomStr}.log + """, returnStatus: true) + + def check_res = "" + if (task_res_code == 0){ + check_res = "success" + remote_dir = remoteDir+"/riscv64/qemu-riscv64" + local_dir = "~/oebuild_workspace/build/qemu-riscv64/output/${IMAGE_DATE}/" + uploadImageWithKey(remoteIP, remote_dir, remoteUname, remoteKey, local_dir) + }else{ + check_res = "failed" + IS_FAILD = true + } + // 对检查赋值 + archiveArtifacts "${logDir}/*.log" + STAGES_RES.push(formatRes("qemu_riscv64", "build", check_res, "artifact/${logDir}/${randomStr}.log")) + } + } + } + } + } + } + } + } + post { + always { + dir('/home/jenkins/agent/embedded-ci'){ + script{ + withCredentials([ + string(credentialsId: "${giteeId}", variable: 'GITEETOKEN')]){ + def chks = "" + for (int i = 0; i < STAGES_RES.size(); ++i) { + chks = "${chks} -chk ${STAGES_RES[i]}" + } + sh """ + python3 main.py comment \ + -m ci \ + -o $repoNamespace \ + -p $repoName \ + -b $ciBranch \ + -gt $GITEETOKEN \ + $chks + """ + } + } + } + } + } +} diff --git a/.oebuild/workflows/jenkinsfile_gate b/.oebuild/workflows/jenkinsfile_gate new file mode 100644 index 0000000000000000000000000000000000000000..46de4ab3295e0ae058ce5138890cceab517fa737 --- /dev/null +++ b/.oebuild/workflows/jenkinsfile_gate @@ -0,0 +1,405 @@ +def downloadEmbeddedCI(){ + sh 'rm -rf embedded-ci' + sh "git clone ${embeddedRemote} -b ${embeddedBranch} -v embedded-ci --depth=1" +} + +def downloadYoctoWithPr(String workspace, String namespace, String repo, Integer prnum, Integer deepth){ + sh """ + python3 main.py clone_repo \ + -w ${workspace} \ + -r https://gitee.com/${namespace}/${repo} \ + -p ${repo} \ + -pr ${prnum} \ + -dp ${deepth} + """ +} + +def formatRes(String name, String action, String check_res, String log_path){ + return sh (script: """ + python3 main.py serial \ + -c name=$name \ + -c action=$action \ + -c result=$check_res \ + -c log_path=$log_path + """, returnStdout: true).trim() +} + +def getRandomStr(){ + return sh(script: """ + cat /proc/sys/kernel/random/uuid + """, returnStdout: true).trim() +} + +def mkdirOpeneulerLog(){ + def logdir = "openeuler/log" + sh "mkdir -p $logdir" + return logdir +} + +def STAGES_RES = [] + +pipeline { + agent { node "${node}" } + environment { + PATH = "/home/jenkins/.local/bin:${env.PATH}" + } + stages { + stage("clone embedded-ci"){ + steps{ + dir('/home/jenkins/agent'){ + script{ + downloadEmbeddedCI() + } + } + } + } + stage("pre") { + steps { + dir('/home/jenkins/agent/embedded-ci'){ + script{ + withCredentials([ + string(credentialsId: "${giteeId}", variable: 'GITEETOKEN'), + usernamePassword(credentialsId: "${jenkinsId}", usernameVariable: 'JUSER',passwordVariable: 'JPASSWD')]){ + // 执行pre + sh """ + python3 main.py pre \ + -s /home/jenkins/ccache/openeuler_embedded \ + -o $giteeTargetNamespace \ + -p $giteeRepoName \ + -pr $giteePullRequestid \ + -juser $JUSER \ + -jpwd $JPASSWD \ + -gt $GITEETOKEN + """ + // 执行pr_check + env.pr_check_result = sh (script: """ + python3 main.py pr_check \ + -o $giteeTargetNamespace \ + -p $giteeRepoName \ + -pr $giteePullRequestid \ + -gt $GITEETOKEN + """, returnStdout: true).trim() + } + } + } + } + } + stage("code check"){ + steps { + dir('/home/jenkins/agent/embedded-ci'){ + script{ + // 下载yocto源码 + downloadYoctoWithPr("/home/jenkins/agent", giteeTargetNamespace, giteeRepoName, Integer.parseInt(giteePullRequestid), Integer.parseInt(commitCount)) + def randomStr = getRandomStr() + def logDir = mkdirOpeneulerLog() + // 执行commit检查 + def task_res_code = sh (script: """ + python3 main.py codecheck \ + -c /home/jenkins/agent/yocto-meta-openeuler \ + -target commit_msg \ + -o $giteeTargetNamespace \ + -p $giteeRepoName \ + -pr $giteePullRequestid > ${logDir}/${randomStr}.log + """, returnStatus: true) + def check_res = "" + if (task_res_code == 0){ + check_res = "success" + }else{ + check_res = "failed" + env.code_check_result = "failed" + } + // 对检查赋值 + // env.task_check_commit = formatRes("check", "commit_check", check_res, "xxx") + archiveArtifacts "${logDir}/*.log" + STAGES_RES.push(formatRes("check", "commit_check", check_res, "artifact/${logDir}/${randomStr}.log")) + } + } + dir('/home/jenkins/agent/embedded-ci'){ + script{ + // 执行scope检查 + def randomStr = getRandomStr() + def logDir = mkdirOpeneulerLog() + // 执行commit检查 + def task_res_code = sh (script: """ + python3 main.py codecheck \ + -target commit_scope \ + -o $giteeTargetNamespace \ + -p $giteeRepoName \ + -pr $giteePullRequestid > ${logDir}/${randomStr}.log + """, returnStatus: true) + def check_res = "" + if (task_res_code == 0){ + check_res = "success" + }else{ + check_res = "failed" + env.code_check_result = "failed" + } + // 对检查赋值 + // env.task_check_scope = formatRes("check", "scope_check", check_res, "xxx") + archiveArtifacts "${logDir}/*.log" + STAGES_RES.push(formatRes("check", "scope_check", check_res, "artifact/${logDir}/${randomStr}.log")) + } + } + } + } + stage("check task"){ + when { + expression { + return env.code_check_result != "failed" + } + } + parallel { + stage("docs"){ + agent { node "${node}" } + when { + expression { + return env.pr_check_result.contains("docs") + } + } + steps{ + dir('/home/jenkins/agent'){ + script{ + downloadEmbeddedCI() + } + } + dir('/home/jenkins/agent/embedded-ci'){ + script{ + // 执行docs编译 + // 下载yocto源码 + downloadYoctoWithPr("/home/jenkins/agent", giteeTargetNamespace, giteeRepoName, Integer.parseInt(giteePullRequestid), 1) + def randomStr = getRandomStr() + def logDir = mkdirOpeneulerLog() + // 执行文档编译检查 + def task_res_code = sh (script: """ + python3 main.py build \ + -c /home/jenkins/agent/yocto-meta-openeuler \ + -target openeuler_doc > ${logDir}/${randomStr}.log + """, returnStatus: true) + def check_res = "" + if (task_res_code == 0){ + check_res = "success" + }else{ + check_res = "failed" + } + // 对检查赋值 + // env.task_build_docs = formatRes("docs", "build", check_res, "xxx") + archiveArtifacts "${logDir}/*.log" + STAGES_RES.push(formatRes("docs", "build", check_res, "artifact/${logDir}/${randomStr}.log")) + } + } + } + } + stage("qemu_aarch64"){ + agent { node "${node}" } + when { + expression { + return env.pr_check_result.contains("code") + } + } + steps { + dir('/home/jenkins/agent'){ + script{ + downloadEmbeddedCI() + } + } + dir('/home/jenkins/agent/embedded-ci'){ + script{ + // 执行qemu_aarch64编译 + // 下载yocto源码 + downloadYoctoWithPr("/home/jenkins/agent", giteeTargetNamespace, giteeRepoName, Integer.parseInt(giteePullRequestid), 1) + def randomStr = getRandomStr() + def logDir = mkdirOpeneulerLog() + // 执行镜像编译检查 + def task_res_code = sh (script: """ + python3 main.py build \ + -c /home/jenkins/agent/yocto-meta-openeuler \ + -target openeuler_image \ + -a aarch64 \ + -t /usr1/openeuler/gcc/openeuler_gcc_arm64le \ + -p qemu-aarch64 \ + -i openeuler-image \ + -d qemu-aarch64 > ${logDir}/${randomStr}.log + """, returnStatus: true) + + def check_res = "" + if (task_res_code == 0){ + check_res = "success" + }else{ + check_res = "failed" + } + // 对检查赋值 + archiveArtifacts "${logDir}/*.log" + STAGES_RES.push(formatRes("qemu_aarch64", "build", check_res, "artifact/${logDir}/${randomStr}.log")) + } + } + } + } + stage("qemu_aarch64_tiny"){ + agent { node "${node}" } + when { + expression { + return env.pr_check_result.contains("code") + } + } + steps { + dir('/home/jenkins/agent'){ + script{ + downloadEmbeddedCI() + } + } + dir('/home/jenkins/agent/embedded-ci'){ + script{ + // 执行qemu_aarch64编译 + // 下载yocto源码 + downloadYoctoWithPr("/home/jenkins/agent", giteeTargetNamespace, giteeRepoName, Integer.parseInt(giteePullRequestid), 1) + def randomStr = getRandomStr() + def logDir = mkdirOpeneulerLog() + // 执行镜像编译检查 + def task_res_code = sh (script: """ + python3 main.py build \ + -c /home/jenkins/agent/yocto-meta-openeuler \ + -target openeuler_image \ + -a aarch64 \ + -t /usr1/openeuler/gcc/openeuler_gcc_arm64le \ + -p qemu-aarch64 \ + -i openeuler-image-tiny \ + -d qemu-aarch64-tiny > ${logDir}/${randomStr}.log + """, returnStatus: true) + + def check_res = "" + if (task_res_code == 0){ + check_res = "success" + }else{ + check_res = "failed" + } + // 对检查赋值 + archiveArtifacts "${logDir}/*.log" + STAGES_RES.push(formatRes("qemu_aarch64_tiny", "build", check_res, "artifact/${logDir}/${randomStr}.log")) + } + } + } + } + stage("qemu_arm"){ + agent { node "${node}" } + when { + expression { + return env.pr_check_result.contains("code") + } + } + steps { + dir('/home/jenkins/agent'){ + script{ + downloadEmbeddedCI() + } + } + dir('/home/jenkins/agent/embedded-ci'){ + script{ + // 执行qemu_arm编译 + // 下载yocto源码 + downloadYoctoWithPr("/home/jenkins/agent", giteeTargetNamespace, giteeRepoName, Integer.parseInt(giteePullRequestid), 1) + def randomStr = getRandomStr() + def logDir = mkdirOpeneulerLog() + // 执行镜像编译检查 + def task_res_code = sh (script: """ + python3 main.py build \ + -c /home/jenkins/agent/yocto-meta-openeuler \ + -target openeuler_image \ + -a arm \ + -t /usr1/openeuler/gcc/openeuler_gcc_arm32le \ + -p qemu-arm \ + -i openeuler-image \ + -d qemu-arm > ${logDir}/${randomStr}.log + """, returnStatus: true) + + def check_res = "" + if (task_res_code == 0){ + check_res = "success" + }else{ + check_res = "failed" + } + // 对检查赋值 + archiveArtifacts "${logDir}/*.log" + STAGES_RES.push(formatRes("qemu_arm", "build", check_res, "artifact/${logDir}/${randomStr}.log")) + } + } + } + } + stage("qemu_x86"){ + agent { node "${node}" } + when { + expression { + return env.pr_check_result.contains("code") + } + } + steps { + dir('/home/jenkins/agent'){ + script{ + downloadEmbeddedCI() + } + } + dir('/home/jenkins/agent/embedded-ci'){ + script{ + // 执行qemu_arm编译 + // 下载yocto源码 + def randomStr = getRandomStr() + def logDir = mkdirOpeneulerLog() + downloadYoctoWithPr("/home/jenkins/agent", giteeTargetNamespace, giteeRepoName, Integer.parseInt(giteePullRequestid), 1) + // 执行镜像编译检查 + def task_res_code = sh (script: """ + python3 main.py build \ + -c /home/jenkins/agent/yocto-meta-openeuler \ + -target openeuler_image \ + -a x86_64 \ + -t /usr1/openeuler/gcc/openeuler_gcc_x86_64 \ + -p x86-64 \ + -i openeuler-image \ + -d qemu-x86-64 > ${logDir}/${randomStr}.log + """, returnStatus: true) + + def check_res = "" + if (task_res_code == 0){ + check_res = "success" + }else{ + check_res = "failed" + } + // 对检查赋值 + archiveArtifacts "${logDir}/*.log" + STAGES_RES.push(formatRes("qemu_x86", "build", check_res, "artifact/${logDir}/${randomStr}.log")) + } + } + } + } + } + } + } + post { + always { + dir('/home/jenkins/agent/embedded-ci'){ + script{ + withCredentials([ + string(credentialsId: "${giteeId}", variable: 'GITEETOKEN'), + usernamePassword(credentialsId: "${jenkinsId}", usernameVariable: 'JUSER',passwordVariable: 'JPASSWD')]){ + if (currentBuild.result != 'ABORTED') { + def chks = "" + for (int i = 0; i < STAGES_RES.size(); ++i) { + chks = "${chks} -chk ${STAGES_RES[i]}" + } + + def duration_time = System.currentTimeMillis() - currentBuild.startTimeInMillis + sh """ + python3 main.py comment \ + -m gate \ + -o $giteeTargetNamespace \ + -p $giteeRepoName \ + -pr $giteePullRequestid \ + -gt $GITEETOKEN \ + -dt $duration_time \ + $chks + """ + } + } + } + } + } + } +} diff --git a/bsp/meta-openeuler-bsp/conf/machine/openeuler-rockchip-rk3588-evb.conf b/bsp/meta-openeuler-bsp/conf/machine/openeuler-rockchip-rk3588-evb.conf index b1f085a8563edc00a4d8feec7e24168f11b99cb4..07207b9b499a9e554d786c7a40953d491e8ee88a 100644 --- a/bsp/meta-openeuler-bsp/conf/machine/openeuler-rockchip-rk3588-evb.conf +++ b/bsp/meta-openeuler-bsp/conf/machine/openeuler-rockchip-rk3588-evb.conf @@ -1,4 +1,4 @@ -require conf/machine/include/rk356x.inc +require conf/machine/include/rk3588.inc # set IMAGETYPE and dtb RK_WIFIBT_FIRMWARES = " \ diff --git a/bsp/meta-openeuler-bsp/raspberrypi/recipes-kernel/linux/files/rpi4b.cfg b/bsp/meta-openeuler-bsp/raspberrypi/recipes-kernel/linux/files/rpi4b.cfg new file mode 100644 index 0000000000000000000000000000000000000000..3fe0a004989fa597fbfa350573870401de7911f2 --- /dev/null +++ b/bsp/meta-openeuler-bsp/raspberrypi/recipes-kernel/linux/files/rpi4b.cfg @@ -0,0 +1,4 @@ +# +# kernel configs required for raspberrypi 4B in openEuler +# +CONFIG_ACPI=y diff --git a/bsp/meta-openeuler-bsp/raspberrypi/recipes-kernel/linux/linux-openeuler-rpi.inc b/bsp/meta-openeuler-bsp/raspberrypi/recipes-kernel/linux/linux-openeuler-rpi.inc index c19557e705d3f7339aefe8bfe5405d7e5c2d3605..0a53de422d7e577b2d991f521f805ffb9a4cae7d 100644 --- a/bsp/meta-openeuler-bsp/raspberrypi/recipes-kernel/linux/linux-openeuler-rpi.inc +++ b/bsp/meta-openeuler-bsp/raspberrypi/recipes-kernel/linux/linux-openeuler-rpi.inc @@ -3,8 +3,9 @@ FILESEXTRAPATHS:append := "${THISDIR}/files/:" # export symbol for jailhouse SRC_URI:append = "${@bb.utils.contains('MCS_FEATURES', 'jailhouse', \ - ' file://Jailhouse/jailhouse_fix_rpi4_compile_error.patch \ - file://enable_cpu_hotplug.patch', '', d)}" + ' file://Jailhouse/jailhouse_fix_rpi4_compile_error.patch \ + file://enable_cpu_hotplug.patch', '', d)} \ + file://rpi4b.cfg " # no external defconfig @@ -13,10 +14,4 @@ OPENEULER_KERNEL_CONFIG = "" # after patches are unpatched KBUILD_DEFCONFIG = "bcm2711_defconfig" - -do_configure:prepend() { - sed -i '$a CONFIG_ACPI=y' .config - sed -i '$a CONFIG_NET_CLS_TCINDEX=y' .config -} - COMPATIBLE_MACHINE = "raspberrypi4-64" diff --git a/bsp/meta-openeuler-bsp/rockchip/recipes-bsp/rk-binary/rk-binary-native.bb b/bsp/meta-openeuler-bsp/rockchip/recipes-bsp/rk-binary/rk-binary-native.bb index 26370a878d943d462cf2f2bafc47ce9a4df3474b..22ff33b38d8a75c458b05086b62d79a4ee78c38e 100644 --- a/bsp/meta-openeuler-bsp/rockchip/recipes-bsp/rk-binary/rk-binary-native.bb +++ b/bsp/meta-openeuler-bsp/rockchip/recipes-bsp/rk-binary/rk-binary-native.bb @@ -9,7 +9,7 @@ SRC_URI = " \ file://rk-binary-native \ " -S = "${WORKDIR}/" +S = "${WORKDIR}" SRCREV_rkbin = "" SRCREV_tools = "" diff --git a/bsp/meta-openeuler-bsp/rockchip/recipes-core/images/ok3399.inc b/bsp/meta-openeuler-bsp/rockchip/recipes-core/images/ok3399.inc index b5c228c87dbd817b03eb26efe7008f4d189051a9..983a45a1d4ec8d9fb5f6be503e6a93f657e267bb 100644 --- a/bsp/meta-openeuler-bsp/rockchip/recipes-core/images/ok3399.inc +++ b/bsp/meta-openeuler-bsp/rockchip/recipes-core/images/ok3399.inc @@ -1,2 +1,2 @@ -#image configuration for aarch64 +#image configuration for ok3399 require rockchip.inc diff --git a/bsp/meta-openeuler-bsp/rockchip/recipes-core/images/ok3568.inc b/bsp/meta-openeuler-bsp/rockchip/recipes-core/images/ok3568.inc index a8d311c7d5fa11871b121f16dc74c6a604faadbd..44b657d7774aa4a1b14db28f1a1aa45a63f5adcb 100644 --- a/bsp/meta-openeuler-bsp/rockchip/recipes-core/images/ok3568.inc +++ b/bsp/meta-openeuler-bsp/rockchip/recipes-core/images/ok3568.inc @@ -1,3 +1,3 @@ -#image configuration for aarch64 +#image configuration for ok3568 require rockchip.inc diff --git a/bsp/meta-openeuler-bsp/rockchip/recipes-core/images/ok3588.inc b/bsp/meta-openeuler-bsp/rockchip/recipes-core/images/ok3588.inc index b5c228c87dbd817b03eb26efe7008f4d189051a9..d96fe82e275524d822283670a7f6f4a6e6c1ad96 100644 --- a/bsp/meta-openeuler-bsp/rockchip/recipes-core/images/ok3588.inc +++ b/bsp/meta-openeuler-bsp/rockchip/recipes-core/images/ok3588.inc @@ -1,2 +1,2 @@ -#image configuration for aarch64 +#image configuration for ok3568 require rockchip.inc diff --git a/bsp/meta-openeuler-bsp/rockchip/recipes-core/packagegroups/packagegroup-base.bbappend b/bsp/meta-openeuler-bsp/rockchip/recipes-core/packagegroups/packagegroup-base.bbappend index f1ecc8343e0b86192da2ccd859e0337206c1d915..784d40a2323779f652961877730a202efadbb000 100644 --- a/bsp/meta-openeuler-bsp/rockchip/recipes-core/packagegroups/packagegroup-base.bbappend +++ b/bsp/meta-openeuler-bsp/rockchip/recipes-core/packagegroups/packagegroup-base.bbappend @@ -1,7 +1,5 @@ +# add wifi related packages RDEPENDS:packagegroup-base:append = " \ wpa-supplicant \ wififirmware \ " -RDEPENDS:packagegroup-base-utils:remove:rockchip = " \ -ethercat \ -" \ No newline at end of file diff --git a/bsp/meta-openeuler-bsp/rockchip/recipes-core/systemd/systemd_%.bbappend b/bsp/meta-openeuler-bsp/rockchip/recipes-core/systemd/systemd_%.bbappend new file mode 100644 index 0000000000000000000000000000000000000000..0a8af110253b64cd2aba8fff8b65955b78400586 --- /dev/null +++ b/bsp/meta-openeuler-bsp/rockchip/recipes-core/systemd/systemd_%.bbappend @@ -0,0 +1,3 @@ +SRC_URI:remove = " \ + file://0001-basic-Allow-unknown-filesystems.patch \ +" diff --git a/bsp/meta-openeuler-bsp/rockchip/recipes-kernel/linux/files/tools/mkbootimg b/bsp/meta-openeuler-bsp/rockchip/recipes-kernel/linux/files/tools/mkbootimg new file mode 100755 index 0000000000000000000000000000000000000000..c3e09aba3499704e3faa327da6f265a25a82c8e8 --- /dev/null +++ b/bsp/meta-openeuler-bsp/rockchip/recipes-kernel/linux/files/tools/mkbootimg @@ -0,0 +1,234 @@ +#!/usr/bin/env python +# Copyright 2015, The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function +from sys import argv, exit, stderr +from argparse import ArgumentParser, FileType, Action +from os import fstat +from struct import pack +from hashlib import sha1 +import sys +import re + +def filesize(f): + if f is None: + return 0 + try: + return fstat(f.fileno()).st_size + except OSError: + return 0 + + +def update_sha(sha, f): + if f: + sha.update(f.read()) + f.seek(0) + sha.update(pack('I', filesize(f))) + else: + sha.update(pack('I', 0)) + + +def pad_file(f, padding): + pad = (padding - (f.tell() & (padding - 1))) & (padding - 1) + f.write(pack(str(pad) + 'x')) + + +def get_number_of_pages(image_size, page_size): + """calculates the number of pages required for the image""" + return (image_size + page_size - 1) / page_size + + +def get_recovery_dtbo_offset(args): + """calculates the offset of recovery_dtbo image in the boot image""" + num_header_pages = 1 # header occupies a page + num_kernel_pages = get_number_of_pages(filesize(args.kernel), args.pagesize) + num_ramdisk_pages = get_number_of_pages(filesize(args.ramdisk), args.pagesize) + num_second_pages = get_number_of_pages(filesize(args.second), args.pagesize) + dtbo_offset = args.pagesize * (num_header_pages + num_kernel_pages + + num_ramdisk_pages + num_second_pages) + return dtbo_offset + + +def write_header(args): + BOOT_IMAGE_HEADER_V1_SIZE = 1648 + BOOT_IMAGE_HEADER_V2_SIZE = 1660 + BOOT_MAGIC = 'ANDROID!'.encode() + + if (args.header_version > 2): + raise ValueError('Boot header version %d not supported' % args.header_version) + + args.output.write(pack('8s', BOOT_MAGIC)) + final_ramdisk_offset = (args.base + args.ramdisk_offset) if filesize(args.ramdisk) > 0 else 0 + final_second_offset = (args.base + args.second_offset) if filesize(args.second) > 0 else 0 + args.output.write(pack('10I', + filesize(args.kernel), # size in bytes + args.base + args.kernel_offset, # physical load addr + filesize(args.ramdisk), # size in bytes + final_ramdisk_offset, # physical load addr + filesize(args.second), # size in bytes + final_second_offset, # physical load addr + args.base + args.tags_offset, # physical addr for kernel tags + args.pagesize, # flash page size we assume + args.header_version, # version of bootimage header + (args.os_version << 11) | args.os_patch_level)) # os version and patch level + args.output.write(pack('16s', args.board.encode())) # asciiz product name + args.output.write(pack('512s', args.cmdline[:512].encode())) + + sha = sha1() + update_sha(sha, args.kernel) + update_sha(sha, args.ramdisk) + update_sha(sha, args.second) + + if args.header_version > 0: + update_sha(sha, args.recovery_dtbo) + if args.header_version > 1: + update_sha(sha, args.dtb) + + img_id = pack('32s', sha.digest()) + + args.output.write(img_id) + args.output.write(pack('1024s', args.cmdline[512:].encode())) + + if args.header_version > 0: + args.output.write(pack('I', filesize(args.recovery_dtbo))) # size in bytes + if args.recovery_dtbo: + args.output.write(pack('Q', get_recovery_dtbo_offset(args))) # recovery dtbo offset + else: + args.output.write(pack('Q', 0)) # Will be set to 0 for devices without a recovery dtbo + + # Populate boot image header size for header versions 1 and 2. + if args.header_version == 1: + args.output.write(pack('I', BOOT_IMAGE_HEADER_V1_SIZE)) + elif args.header_version == 2: + args.output.write(pack('I', BOOT_IMAGE_HEADER_V2_SIZE)) + + if args.header_version > 1: + args.output.write(pack('I', filesize(args.dtb))) # size in bytes + args.output.write(pack('Q', args.base + args.dtb_offset)) # dtb physical load address + pad_file(args.output, args.pagesize) + return img_id + + +class ValidateStrLenAction(Action): + def __init__(self, option_strings, dest, nargs=None, **kwargs): + if 'maxlen' not in kwargs: + raise ValueError('maxlen must be set') + self.maxlen = int(kwargs['maxlen']) + del kwargs['maxlen'] + super(ValidateStrLenAction, self).__init__(option_strings, dest, **kwargs) + + def __call__(self, parser, namespace, values, option_string=None): + if len(values) > self.maxlen: + raise ValueError('String argument too long: max {0:d}, got {1:d}'. + format(self.maxlen, len(values))) + setattr(namespace, self.dest, values) + + +def write_padded_file(f_out, f_in, padding): + if f_in is None: + return + f_out.write(f_in.read()) + pad_file(f_out, padding) + + +def parse_int(x): + return int(x, 0) + +def parse_os_version(x): + match = re.search(r'^(\d{1,3})(?:\.(\d{1,3})(?:\.(\d{1,3}))?)?', x) + if match: + a = int(match.group(1)) + b = c = 0 + if match.lastindex >= 2: + b = int(match.group(2)) + if match.lastindex == 3: + c = int(match.group(3)) + # 7 bits allocated for each field + assert a < 128 + assert b < 128 + assert c < 128 + return (a << 14) | (b << 7) | c + return 0 + +def parse_os_patch_level(x): + match = re.search(r'^(\d{4})-(\d{2})-(\d{2})', x) + if match: + y = int(match.group(1)) - 2000 + m = int(match.group(2)) + # 7 bits allocated for the year, 4 bits for the month + assert y >= 0 and y < 128 + assert m > 0 and m <= 12 + return (y << 4) | m + return 0 + +def parse_cmdline(): + parser = ArgumentParser() + parser.add_argument('--kernel', help='path to the kernel', type=FileType('rb'), + required=True) + parser.add_argument('--ramdisk', help='path to the ramdisk', type=FileType('rb')) + parser.add_argument('--second', help='path to the 2nd bootloader', type=FileType('rb')) + parser.add_argument('--dtb', help='path to dtb', type=FileType('rb')) + recovery_dtbo_group = parser.add_mutually_exclusive_group() + recovery_dtbo_group.add_argument('--recovery_dtbo', help='path to the recovery DTBO', type=FileType('rb')) + recovery_dtbo_group.add_argument('--recovery_acpio', help='path to the recovery ACPIO', + type=FileType('rb'), metavar='RECOVERY_ACPIO', dest='recovery_dtbo') + parser.add_argument('--cmdline', help='extra arguments to be passed on the ' + 'kernel command line', default='', action=ValidateStrLenAction, maxlen=1536) + parser.add_argument('--base', help='base address', type=parse_int, default=0x10000000) + parser.add_argument('--kernel_offset', help='kernel offset', type=parse_int, default=0x00008000) + parser.add_argument('--ramdisk_offset', help='ramdisk offset', type=parse_int, default=0x01000000) + parser.add_argument('--second_offset', help='2nd bootloader offset', type=parse_int, + default=0x00f00000) + parser.add_argument('--dtb_offset', help='dtb offset', type=parse_int, default=0x01f00000) + + parser.add_argument('--os_version', help='operating system version', type=parse_os_version, + default=0) + parser.add_argument('--os_patch_level', help='operating system patch level', + type=parse_os_patch_level, default=0) + parser.add_argument('--tags_offset', help='tags offset', type=parse_int, default=0x00000100) + parser.add_argument('--board', help='board name', default='', action=ValidateStrLenAction, + maxlen=16) + parser.add_argument('--pagesize', help='page size', type=parse_int, + choices=[2**i for i in range(11,15)], default=2048) + parser.add_argument('--id', help='print the image ID on standard output', + action='store_true') + parser.add_argument('--header_version', help='boot image header version', type=parse_int, default=0) + parser.add_argument('-o', '--output', help='output file name', type=FileType('wb'), + required=True) + return parser.parse_args() + + +def write_data(args): + write_padded_file(args.output, args.kernel, args.pagesize) + write_padded_file(args.output, args.ramdisk, args.pagesize) + write_padded_file(args.output, args.second, args.pagesize) + + if args.header_version > 0: + write_padded_file(args.output, args.recovery_dtbo, args.pagesize) + if args.header_version > 1: + write_padded_file(args.output, args.dtb, args.pagesize) + +def main(): + args = parse_cmdline() + img_id = write_header(args) + write_data(args) + if args.id: + if isinstance(img_id, str): + # Python 2's struct.pack returns a string, but py3 returns bytes. + img_id = [ord(x) for x in img_id] + print('0x' + ''.join('{:02x}'.format(c) for c in img_id)) + +if __name__ == '__main__': + main() diff --git a/bsp/meta-openeuler-bsp/rockchip/recipes-kernel/linux/linux-openeuler-rt.bbappend b/bsp/meta-openeuler-bsp/rockchip/recipes-kernel/linux/linux-openeuler-rt.bbappend index ed98d39558b719c9ea09ba37741dee161b14b7c0..4bbfcd670cd801d962311fd4788cb211e408d913 100644 --- a/bsp/meta-openeuler-bsp/rockchip/recipes-kernel/linux/linux-openeuler-rt.bbappend +++ b/bsp/meta-openeuler-bsp/rockchip/recipes-kernel/linux/linux-openeuler-rt.bbappend @@ -4,10 +4,6 @@ SRC_URI:append:rockchip = " \ file://patches/0002-fix-fiq_debugger.patch \ file://patches/0002-fix_fpsimd_sched_panic.patch \ " -#define and use defconfig -do_configure:prepend() { - sed -i 's/CONFIG_PREEMPT=y/CONFIG_PREEMPT_RT=y/g' .config -} #add COMPATIBLE_MACHINE COMPATIBLE_MACHINE = "ok3568|ryd-3568|ok3588|ok3399" diff --git a/bsp/meta-openeuler-bsp/rockchip/recipes-kernel/linux/linux-rockchip.inc b/bsp/meta-openeuler-bsp/rockchip/recipes-kernel/linux/linux-rockchip.inc index 010f7501579490dbce8fea9010f3b9a43af99b97..e28f81ecdf4f6d0c6e1951e4daba4bd68efed925 100644 --- a/bsp/meta-openeuler-bsp/rockchip/recipes-kernel/linux/linux-rockchip.inc +++ b/bsp/meta-openeuler-bsp/rockchip/recipes-kernel/linux/linux-rockchip.inc @@ -19,7 +19,7 @@ SRC_URI:append = " \ ${@bb.utils.contains('MCS_FEATURES', 'openamp', 'file://patches/0003-ok3568-support-mcs.patch', '', d)} \ " -# more support of device is comming. so we documented this patch md5sum. +# more support of device is coming. so we documented this patch md5sum. SRC_URI[rockchip-kernel-patch.md5sum] = "f16b44a335ad487d95764af1adddc3dc" # add patch tool to solve patch apply @@ -27,7 +27,7 @@ PATCHTOOL = "git" OPENEULER_KERNEL_CONFIG = "file://config/${MACHINE}/${MACHINE}_defconfig" -# add method to do_compile task to produce bootable Image +# add method to do_compile task to produce Rockchip specific bootable Image do_compile:append:rk3568(){ cp ../logo/* ./ scripts/mkkrnlimg ${KERNEL_OUTPUT_DIR}/Image kernel.img @@ -48,11 +48,11 @@ do_compile:append:rk3588(){ rm -rf .tmp_its_config } -do_compile:append:ok3399(){ +do_compile:append:rk3399(){ cp ../logo/* ./ scripts/mkkrnlimg ${KERNEL_OUTPUT_DIR}/Image kernel.img ../tools/mkimg --dtb ${ROCKCHIP_KERNEL_DTB_NAME} - scripts/mkbootimg --kernel ${KERNEL_OUTPUT_DIR}/Image --second resource.img -o boot.img && + ../tools/mkbootimg --kernel ${KERNEL_OUTPUT_DIR}/Image --second resource.img -o boot.img } # add boot.img to $D @@ -60,4 +60,4 @@ do_install:append(){ cp ${B}/boot.img ${D}/boot } PACKAGES += "bootfile" -FILES:bootfile="/boot/boot.img" \ No newline at end of file +FILES:bootfile="/boot/boot.img" diff --git a/docs/image/benchmark/bandwidth.png b/docs/image/benchmark/bandwidth.png new file mode 100644 index 0000000000000000000000000000000000000000..c28086c2f74ccc22c691784ec686c158458b57ea Binary files /dev/null and b/docs/image/benchmark/bandwidth.png differ diff --git a/docs/image/benchmark/benchmark.png b/docs/image/benchmark/benchmark.png new file mode 100644 index 0000000000000000000000000000000000000000..e8b5c80815bcf898a01b4a5e2927b3b6303867a2 Binary files /dev/null and b/docs/image/benchmark/benchmark.png differ diff --git a/docs/image/benchmark/ping.gif b/docs/image/benchmark/ping.gif new file mode 100644 index 0000000000000000000000000000000000000000..0dc0e74c389f9e82282afc8d92ac2023e726cfa4 Binary files /dev/null and b/docs/image/benchmark/ping.gif differ diff --git a/docs/image/benchmark/ping.png b/docs/image/benchmark/ping.png new file mode 100644 index 0000000000000000000000000000000000000000..86b003d0980204e075b0ed00019bb233696d4cec Binary files /dev/null and b/docs/image/benchmark/ping.png differ diff --git a/docs/image/benchmark/pty-bandwidth.gif b/docs/image/benchmark/pty-bandwidth.gif new file mode 100644 index 0000000000000000000000000000000000000000..08e886b0f7657b838aa4344b3a49feba8295d8ef Binary files /dev/null and b/docs/image/benchmark/pty-bandwidth.gif differ diff --git a/docs/image/benchmark/pty-ping.gif b/docs/image/benchmark/pty-ping.gif new file mode 100644 index 0000000000000000000000000000000000000000..bb0ef3759a8b8487c96477386abda4deb55e7aff Binary files /dev/null and b/docs/image/benchmark/pty-ping.gif differ diff --git a/docs/source/bsp/arm32/index.rst b/docs/source/bsp/arm32/index.rst deleted file mode 100644 index 3371553099b7bd63325685edaaa72a20a6f485fa..0000000000000000000000000000000000000000 --- a/docs/source/bsp/arm32/index.rst +++ /dev/null @@ -1,13 +0,0 @@ -.. _openeuler_embedded_arm32: - - -ARM32硬件 -################################ - -所支持的ARM32硬件如下: - -.. toctree:: - :maxdepth: 1 - :glob: - - */index diff --git a/docs/source/bsp/arm32/qemu_virt_cortex_a15/index.rst b/docs/source/bsp/arm32/qemu_virt_cortex_a15/index.rst deleted file mode 100644 index 0e45c83ea399e3bcf6ba035b8e96d9864bc0a04a..0000000000000000000000000000000000000000 --- a/docs/source/bsp/arm32/qemu_virt_cortex_a15/index.rst +++ /dev/null @@ -1,17 +0,0 @@ -.. _board_qemu_cortex_a15: - - -QEMU Virt Cortex-A15 -###################################### - -基本介绍 -================= - - -构建说明 -================== - - -使用说明 -================= - diff --git a/docs/source/bsp/arm64/rk3568/RKDevTool1.png b/docs/source/bsp/arm64/rockchip/RKDevTool1.png similarity index 100% rename from docs/source/bsp/arm64/rk3568/RKDevTool1.png rename to docs/source/bsp/arm64/rockchip/RKDevTool1.png diff --git a/docs/source/bsp/arm64/rk3568/add_partition.png b/docs/source/bsp/arm64/rockchip/add_partition.png similarity index 100% rename from docs/source/bsp/arm64/rk3568/add_partition.png rename to docs/source/bsp/arm64/rockchip/add_partition.png diff --git a/docs/source/bsp/arm64/rk3568/choose_partition.png b/docs/source/bsp/arm64/rockchip/choose_partition.png similarity index 100% rename from docs/source/bsp/arm64/rk3568/choose_partition.png rename to docs/source/bsp/arm64/rockchip/choose_partition.png diff --git a/docs/source/bsp/arm64/rk3568/compare_rootfs_address.png b/docs/source/bsp/arm64/rockchip/compare_rootfs_address.png similarity index 100% rename from docs/source/bsp/arm64/rk3568/compare_rootfs_address.png rename to docs/source/bsp/arm64/rockchip/compare_rootfs_address.png diff --git a/docs/source/bsp/arm64/rk3568/console1.png b/docs/source/bsp/arm64/rockchip/console1.png similarity index 100% rename from docs/source/bsp/arm64/rk3568/console1.png rename to docs/source/bsp/arm64/rockchip/console1.png diff --git a/docs/source/bsp/arm64/rk3568/console2.png b/docs/source/bsp/arm64/rockchip/console2.png similarity index 100% rename from docs/source/bsp/arm64/rk3568/console2.png rename to docs/source/bsp/arm64/rockchip/console2.png diff --git a/docs/source/bsp/arm64/rk3568/console_link.png b/docs/source/bsp/arm64/rockchip/console_link.png similarity index 100% rename from docs/source/bsp/arm64/rk3568/console_link.png rename to docs/source/bsp/arm64/rockchip/console_link.png diff --git a/docs/source/bsp/arm64/rk3568/device_parted_scan.png b/docs/source/bsp/arm64/rockchip/device_parted_scan.png similarity index 100% rename from docs/source/bsp/arm64/rk3568/device_parted_scan.png rename to docs/source/bsp/arm64/rockchip/device_parted_scan.png diff --git a/docs/source/bsp/arm64/rk3568/ifconfig.png b/docs/source/bsp/arm64/rockchip/ifconfig.png similarity index 100% rename from docs/source/bsp/arm64/rk3568/ifconfig.png rename to docs/source/bsp/arm64/rockchip/ifconfig.png diff --git a/docs/source/bsp/arm64/rk3568/index.rst b/docs/source/bsp/arm64/rockchip/index.rst similarity index 60% rename from docs/source/bsp/arm64/rk3568/index.rst rename to docs/source/bsp/arm64/rockchip/index.rst index 753e10f780c8e335a0e3f14a737cf3b68bde2f6d..c6450bf3d1d8a522ac32d5f4d313cd3d636002f1 100644 --- a/docs/source/bsp/arm64/rk3568/index.rst +++ b/docs/source/bsp/arm64/rockchip/index.rst @@ -1,11 +1,11 @@ -.. _board_rk3568: +.. _board_rockchip: -RK3568 +Rockchip ################################# .. toctree:: :maxdepth: 1 - rk3568.rst + rockchip.rst diff --git a/docs/source/bsp/arm64/rk3568/install_driver1.png b/docs/source/bsp/arm64/rockchip/install_driver1.png similarity index 100% rename from docs/source/bsp/arm64/rk3568/install_driver1.png rename to docs/source/bsp/arm64/rockchip/install_driver1.png diff --git a/docs/source/bsp/arm64/rk3568/install_driver2.png b/docs/source/bsp/arm64/rockchip/install_driver2.png similarity index 100% rename from docs/source/bsp/arm64/rk3568/install_driver2.png rename to docs/source/bsp/arm64/rockchip/install_driver2.png diff --git a/docs/source/bsp/arm64/rk3568/install_driver3.png b/docs/source/bsp/arm64/rockchip/install_driver3.png similarity index 100% rename from docs/source/bsp/arm64/rk3568/install_driver3.png rename to docs/source/bsp/arm64/rockchip/install_driver3.png diff --git a/docs/source/bsp/arm64/rockchip/maskrom.png b/docs/source/bsp/arm64/rockchip/maskrom.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6805b2bc47d92375af12a54a1f235f9916a299 Binary files /dev/null and b/docs/source/bsp/arm64/rockchip/maskrom.png differ diff --git a/docs/source/bsp/arm64/rk3568/rk3568.rst b/docs/source/bsp/arm64/rockchip/rockchip.rst similarity index 45% rename from docs/source/bsp/arm64/rk3568/rk3568.rst rename to docs/source/bsp/arm64/rockchip/rockchip.rst index b66d02e1a1823c857ae27e1c02feab3204486f58..9e3430730f17791a8c0a0ae6f22fc7b58416eb60 100644 --- a/docs/source/bsp/arm64/rk3568/rk3568.rst +++ b/docs/source/bsp/arm64/rockchip/rockchip.rst @@ -1,26 +1,33 @@ -.. _board_rk3568_build: +.. _board_rockchip_build: ======================================== -RK3568板卡镜像构建与使用 +Rockchip板卡镜像构建与使用 ======================================== -本章主要介绍openEuler Embedded中RK3568系列板卡的构建,使用和特性介绍。 +本章主要介绍openEuler Embedded中Rockchip系列板卡的构建,使用和特性介绍。 -RK3568镜像构建指导 +Rockchip镜像构建指导 ===================== -- 参照 :ref:`oebuild_install` 完成oebuild安装,并详细了解构建过程 +- 参照 :ref: `oebuild_install` 完成oebuild安装,并详细了解构建过程 -- 依次执行以下命令完成构建 +- 定制化设备: + + 1. 在使用oebuild 初始化后,复制yocto-meta-openeuler/bsp/meta-openeuler-bsp/conf/ok3568.conf改成自己的设备命名,如ok3568.conf,需要改动的其他参数请参考yocto文档; + + 2. 把设备树文件添加到yocto-meta-openeuler/bsp/meta-openeuler-bsp/rockchip/recipes-kernel/linux/files/内; + + 3. 修改yocto-meta-openeuler/bsp/meta-openeuler-bsp/conf/ok3568.conf中的ROCKCHIP_KERNEL_DTB_NAME,改成自己的设备名; + + 4. 如果增加了自己的设备,请复制yocto-meta-openeuler/.oebuild/platform/ok3568.yaml并命名为自己的设备名,如果不能附加功能请关注yocto-meta-openeuler/.oebuild/features/下面的对应功能support:中添加自己的机器。 + +- 依次执行以下例子命令完成构建 .. code-block:: console - # 生成ok3568配置文件 + # 生成ok3568配置文件,目前支持的设备有ryd-3568,ok3568,ok3588.ok3399。如果添加了自己的设备请改对应的名字 oebuild generate -p ok3568 -d ok3568 - # 或生成ryd-3568配置文件 - oebuild generate -p ryd-3568 -d ryd-3568 - # 进入构建交互终端 oebuild bitbake @@ -32,16 +39,18 @@ RK3568镜像构建指导 - 二进制介绍: - 1. Image: rk3568内核镜像 + 1. boot.img: openEuler Embedded 适用rk3568内核镜像。 - 2. openeuler-glibc-x86_64-openeuler-image-aarch64-ok3568-toolchain-\*.sh: SDK工具链 + 2. rootfs.img: 适用rk3568根文件系统,由xxx.ext4改名生成。 - 3. boot.img: openEuler Embedded 适用rk3568内核镜像 + 3. boot.img: openEuler Embedded 适用rk3568内核镜像。 - 4. openeuler-image-ok3568-\*.rootfs.ext4: 适用rk3568根文件系统 + 4. update.img: 整体的烧录镜像,可自行定制,请参考yocto-meta-rockchip/wic/generic-gptdisk.wks.in与yocto-meta-rockchip/conf/machine/include/rockchip-common.inc中的方法。 -镜像使用方法 -===================== + 5. openeuler-glibc-x86_64-openeuler-image-aarch64-ok3568-toolchain-\*.sh: SDK工具链。 + +镜像使用方法,以飞凌ok3568为例 +================================ 1. 烧写前镜像使用 @@ -75,7 +84,12 @@ RK3568镜像构建指导 内核镜像和文件系统烧写方法 =========================== -1. 将瑞芯微开发工具RKDevTool_Release.zip解压到全英文路径下,打开瑞芯微开发工具RKDevTool,使用Type-C线连接开发板和主机,按住开发板的Recovery键不要松开,然后按下RESET键系统复位,大约两秒后松开Recovery键,瑞芯微开发工具RKDevTool将提示发现LOADER设备。 +准备工作:将瑞芯微开发工具RKDevTool_Release.zip解压到全英文路径下,打开瑞芯微开发工具RKDevTool。 + +增量烧写(调试推介使用) +------------------------- + +1. 使用Type-C线连接开发板和主机,按住开发板的Recovery键不要松开,然后按下RESET键系统复位,大约两秒后松开Recovery键,瑞芯微开发工具RKDevTool将提示发现LOADER设备。 .. figure:: switch_turn_to_off.png :align: center @@ -106,19 +120,51 @@ RK3568镜像构建指导 .. figure:: start_burning.png :align: center -基于openEuler Embedded ok3568使用 -=================================== - -启用ok3568 +全量烧写 -------------------- -硬件版本要求:飞凌ok3568 +1. 如果loader正常,使用Type-C线连接开发板和主机,按住开发板的Recovery键不要松开,然后按下RESET键系统复位,大约两秒后松开Recovery键,瑞芯微开发工具RKDevTool将提示发现LOADER设备。 + + .. figure:: switch_turn_to_off.png + :align: center + + .. figure:: RKDevTool1.png + :align: center + +2. 如果loader损坏,可以按住 BOOT 键然后按复位键进入 maskrom 模式进行烧写,此时系统将提示发现一个 maskrom 设备。 + + .. figure:: maskrom.png + :align: center + +.. note:: + + - | maskrom模式与loader模式烧录方法一致。 + + - maskrom 模式下不要点击“设备分区表”,为无效操作。 + +3. 点击“升级固件”选项卡,点击“固件”按钮选择完整的升级镜像 update.img。程序将对固件进行解析,因此需要等待一会。 + + .. figure:: update_img.png + :align: center + +4. 依次点击擦除Flash,升级按钮即可完成升级。 + + .. figure:: update_img_success.png + :align: center + +基于openEuler Embedded 瑞芯微系列开发板使用 +============================================== + +启用瑞芯微系列开发板 +------------------------------ + +硬件版本要求:飞凌ok3568、ok3399、ok3588,ryd-3568或者经上述方法自己添加后的开发板。 默认用户名:root,密码:第一次启动没有默认密码,需重新配置,且密码强度有相应要求, 需要数字、字母、特殊字符组合最少8位,例如openEuler@2021。 -将刷写镜像后的ok3568核心板通电启用。 +将刷写镜像后的核心板通电启用。 -ok3568登录方式 +开发板登录方式 -------------------- 本地登录 @@ -126,16 +172,16 @@ ok3568登录方式 - 使用串口登录: - 镜像使能了串口登录功能,按照ok3568的串口连接方式,如下图,可以启用串口操作。 + 镜像使能了串口登录功能,按照开发板的串口连接方式,如下图,可以启用串口操作。 - 示例:使用ttyusb转接器,将ok3568的串口通过USB连接到putty: + 示例:使用ttyusb转接器,将开发板的串口通过USB连接到putty: .. figure:: console_link.png :align: center - 使用HDMI登录: - ok3568连接显示器(ok3568视频输出接口为HDMI)、键盘、鼠标后,启动ok3568,可以看到ok3568启动日志输出到显示器上。待ok3568启动成功,输入用户名(root)和密码登录。 + 开发板连接显示器(开发板视频输出接口为HDMI)、键盘、鼠标后,启动开发板,可以看到ok3568启动日志输出到显示器上。待ok3568启动成功,输入用户名(root)和密码登录。 ssh 远程登录 ^^^^^^^^^^^^^^^^^ @@ -201,9 +247,9 @@ ssh 远程登录 分区扩容 """""""""""""""""""" - 默认根目录分区空间比较小,在使用之前,需要对分区进行扩容(在23.03及其之后的版本中,已实现自动扩容,首次烧录镜像启动会自动执行扩容并提示重启) + 默认根目录分区空间比较小,在使用之前,需要对分区进行扩容或挂载(在23.03及其之后的版本中,已实现自动扩容,首次烧录镜像启动会自动执行扩容并提示重启) - 执行 fdisk -l 命令查看磁盘分区信息。回显如下: + 执行 fdisk -l 命令查看磁盘分区信息。例子中的ok3568设备回显如下: .. code-block:: console @@ -219,10 +265,12 @@ ssh 远程登录 对应数据分区为 rootfs,与userdata -ok3568镜像特性介绍 -========================== +rockchip系列镜像特性介绍 +=================================================== + + 1. rk3568硬件特性,参考: `Rockchip TRM手册 `_ - 1. ok3568硬件特性,参考: `RK3568 TRM手册 `_ + 其他硬件请参考瑞芯微官方释放的文档。 目前已使能串口设备,可以访问uart,其他硬件特性目前支持:无线网卡、GPU、TF卡、以太网卡、USB Host、SPI、HDMI。 diff --git a/docs/source/bsp/arm64/rk3568/start_burning.png b/docs/source/bsp/arm64/rockchip/start_burning.png similarity index 100% rename from docs/source/bsp/arm64/rk3568/start_burning.png rename to docs/source/bsp/arm64/rockchip/start_burning.png diff --git a/docs/source/bsp/arm64/rk3568/switch_turn_to_off.png b/docs/source/bsp/arm64/rockchip/switch_turn_to_off.png similarity index 100% rename from docs/source/bsp/arm64/rk3568/switch_turn_to_off.png rename to docs/source/bsp/arm64/rockchip/switch_turn_to_off.png diff --git a/docs/source/bsp/arm64/rockchip/update_img.png b/docs/source/bsp/arm64/rockchip/update_img.png new file mode 100644 index 0000000000000000000000000000000000000000..0690eb64e81fa787fff898b9171aa0cafaf7e0ce Binary files /dev/null and b/docs/source/bsp/arm64/rockchip/update_img.png differ diff --git a/docs/source/bsp/arm64/rockchip/update_img_success.png b/docs/source/bsp/arm64/rockchip/update_img_success.png new file mode 100644 index 0000000000000000000000000000000000000000..86de71b1a16f9dbd0c311778f087865e17dac410 Binary files /dev/null and b/docs/source/bsp/arm64/rockchip/update_img_success.png differ diff --git a/docs/source/bsp/arm64/rk3568/wpa_passphrase.png b/docs/source/bsp/arm64/rockchip/wpa_passphrase.png similarity index 100% rename from docs/source/bsp/arm64/rk3568/wpa_passphrase.png rename to docs/source/bsp/arm64/rockchip/wpa_passphrase.png diff --git a/docs/source/bsp/arm64/rk3568/wpa_supplicant.png b/docs/source/bsp/arm64/rockchip/wpa_supplicant.png similarity index 100% rename from docs/source/bsp/arm64/rk3568/wpa_supplicant.png rename to docs/source/bsp/arm64/rockchip/wpa_supplicant.png diff --git a/docs/source/bsp/riscv/index.rst b/docs/source/bsp/riscv/index.rst deleted file mode 100644 index cf2bdb22785b8a57f3747c9a125519cc3e7083d3..0000000000000000000000000000000000000000 --- a/docs/source/bsp/riscv/index.rst +++ /dev/null @@ -1,13 +0,0 @@ -.. _openeuler_embedded_riscv: - - -RISC-V硬件 -################################ - -所支持的RISC-V硬件如下: - -.. toctree:: - :maxdepth: 1 - :glob: - - */index \ No newline at end of file diff --git a/docs/source/features/distributed_softbus.rst b/docs/source/features/distributed_softbus.rst index 4761e63c8a310ee22c7f747e850bfbf1829f4310..6aa81878c8f052a42d348da832bf7b2019cfa20f 100644 --- a/docs/source/features/distributed_softbus.rst +++ b/docs/source/features/distributed_softbus.rst @@ -1043,7 +1043,7 @@ hichain的客户端API头文件在嵌入式版本提供的sdk中对外开放, 基于isula的软总线应用指南 ************************* -在嵌入式23.09版本中,利用isula,制作了预装3.2版本软总线容器镜像,可以在嵌入式环境中通过几行命令就可以完成软总线复杂依赖的安装部署,以及与嵌入式、服务器设备的通信测试。此版本软总线使用binder作为IPC底层驱动,在树莓派静默无业务场景下,资源占用由原来的CPU单核80%降低到1%,并且为支持上层的分布式数据模块的拓展打下了基础。 +嵌入式23.09版本中,利用isula,制作了预装3.2版本软总线容器镜像。在嵌入式环境中通过几行命令就可以安装软总线及其复杂依赖,并完成设备间通信测试。此版本软总线使用binder作为IPC底层驱动,在树莓派静默无业务场景下,资源占用由原来的CPU单核80%降低到1%,并且为支持上层的分布式数据模块的拓展打下了基础。 .. note:: @@ -1064,7 +1064,7 @@ hichain的客户端API头文件在嵌入式版本提供的sdk中对外开放, .. code-block:: console - http://repo.openeuler.org/openEuler-23.09/embedded_img/aarch64/raspberrypi4-64-systemd/openeuler-image-raspberrypi4-64-20230921165629.rootfs.rpi-sdimg + https://repo.openeuler.org/openEuler-23.09/embedded_img/aarch64/raspberrypi4-64-systemd/openeuler-image-raspberrypi4-64-20230927180859.rootfs.rpi-sdimg 参考: @@ -1097,13 +1097,13 @@ hichain的客户端API头文件在嵌入式版本提供的sdk中对外开放, .. code-block:: console - cd /home; wget http://repo.openeuler.org/openEuler-23.09/embedded_img/dsoftbus_isula_image/softbus.xz + cd /home; wget https://repo.openeuler.org/openEuler-23.09/embedded_img/isula_img/openEuler-23.09-isula-softbus.aarch64.xz 6.使用isula加载软总线镜像 .. code-block:: console - isula import /home/softbus.xz softbus + isula import /home/openEuler-23.09-isula-softbus.aarch64.xz softbus 7.查看加载的镜像ID @@ -1120,7 +1120,7 @@ hichain的客户端API头文件在嵌入式版本提供的sdk中对外开放, 容器中启动并测试软总线 ---------------------- -以下操作均在宿主机执行 +以下操作均在容器中执行 1.在容器中写SN号,注意此SN号是本设备标识,需要与其他设备不一致,建议使用本机IP diff --git a/docs/source/features/mica/benchmark.rst b/docs/source/features/mica/benchmark.rst new file mode 100644 index 0000000000000000000000000000000000000000..72e004a88a2e91fce42da71d5517a78edd197fb5 --- /dev/null +++ b/docs/source/features/mica/benchmark.rst @@ -0,0 +1,296 @@ +.. _benchmark: + +性能测试 +######### + +简介 +==== + +目前社区提供的通信方案有两种:一种是通过自定义服务,即使用自定义的endpoint来进行通信,另一种是基于社区提供的pty服务进行消息传递。为了比较两种通信方案之间的性能差异并评估它们的相对优劣,针对不同通信方案进行了一系列测试,包括ping测试(长短消息延时)和带宽测试。为MCS设计了一套Benchmark,可以测试Client os的性能基线,可以帮助用户观测MCS的通信框架。Benchamrk的测试流程如图1所示,其包含的功能主要如下: + +* 基于自定义endpoint通信的Ping和长消息延时测试。 + +* 基于/dev/pts/x的Ping延时和带宽速率测试。 + +.. figure:: ../../../image/benchmark/benchmark.png + :align: center + + 图1. benchmark测试流程 + +测试流程 +======== + +1. 编译和运行程序 +----------------- + +1. 根据openEuler Embedded使用手册安装SDK并设置SDK环境变量。 + +2. 将混合关键系统的git代码下载到本地,进入到mcs目录: + + .. code:: shell + + git clone https://gitee.com/openeuler/mcs.git + cd mcs + +3. 编译mica_main、pty_test,编译方式如下: + + .. code:: shell + + #cmake前记得source一下sdk,否则可能编译报错 + cmake -S . -B build -DDEMO_TARGET=benchmark_demo + cd build + make + + 这将会编译mcs目录下的benchmark_demo相关代码,并在build目录下得到两个可执行文件: mica_main、pty_test,需要在openEuler Embedded环境下运行。 + +2. 基于自定义endpoint的通信测试 +------------------------------- + +1. 运行mica_main程序有以下参数可以设定: + + | ``--ping`` :测试ping延时,ping消息长度为32 Bytes。 + | ``--long-ping`` :测试长消息的延时,默认长消息的大小为4K Bytes。 + | ``--loop`` :指定测试的次数可以和ping或long-ping结合使用。 + + .. code:: shell + + #插入内核模块 + modprobe mcs_km.ko + + #以下命令为,运行mica_main程序,测试ping延时10次 + ./mica_main -c 3 -t zephyr-image.bin -a 0x7a000000 --ping --loop 10 + + #以下命令为,运行mica_main程序,测试long-ping延时10次 + ./mica_main -c 3 -t zephyr-image.bin -a 0x7a000000 --long-ping --loop 10 + + 基于自定义endpoint通信的Ping延时与长消息延时测试可以帮助评估两个系统之间的通信性能。低Ping延时通常意味着更快的响应时间,这对于需要快速交互的应用程序至关重要。这个测试帮助我们了解在即时场景下通信框架的性能,测试过程如图2所示: + +.. figure:: ../../../image/benchmark/ping.png + :align: center + + 图2. ping测试流程图 + +2. 如果运行成功有类似如下打印,最后一行输出就是实时测试结果。 + + .. code:: shell + + ... + found matched endpoint, creating pty-ping with id:3 in host os + found matched endpoint, creating rpc-ping with id:1 in host os + found matched endpoint, creating rpc-long-ping with id:2 in host os + ... + Policy: ping_msg. Reply from remote os: + Count: 23 Realtime: 1339μs Min: 326μs Avg: 1274μs Max: 3578μs + +3. 下图为ping测试的演示GIF图,如果不指定loop参数则会一直进行测试,直到ctrl+c退出。long-ping的测试与ping同理,在此不再展示。 + + .. figure:: ../../../image/benchmark/ping.gif + :align: center + + 图3. ping测试演示GIF + +3. 基于虚拟终端的通信测试 +-------------------------- + +1. 基于虚拟终端的通信测试需要在运行mica_main的时候指定参数pty,成功运行mica_main程序后,可以看到类似如下的输出: + + .. code:: shell + + #插入内核模块 + modprobe mcs_km.ko + + #以下命令为,运行mica_main程序,启动虚拟终端服务 + ./mica_main -c 3 -t zephyr-image.bin -a 0x7a000000 --pty + + ... + pty master fd is :4 + pls open /dev/pts/0 to test pty + pty_thread for pty-ping is runnning + ... + found matched endpoint, creating pty-ping with id:3 in host os + ... + +2. 保持mica_main程序运行,另起一个终端,运行之前生成生成的pty_test可执行文件,即可测试: + + pyt_test需要指定以下参数才可以正常运行: + + | ``--path`` :虚拟终端的路径,必须指定。 + | ``--ping`` :测试ping延时。 + | ``--loop`` :指定测试的次数可以和ping结合使用。 + | ``--bandwidth`` :测试带宽速率。 + | ``--time`` :指定带宽测试的持续时间。 + + 其中 ``ping`` 和 ``bandwidth`` 参数如果同时指定会测试ping不会测试bandwidth, ``path`` 参数必须指定否则找不到虚拟终端的位置。 + +3. 基于虚拟终端的测试命令如下: + + .. code:: shell + + $ ./pty_test /dev/pts/x + + # 指定虚拟终端设备为/dev/pts/1,进行带宽测试,测试时间持续20s + $ ./pty_test --path /dev/pts/0 --bandwidth + + Waiting for senconds, Testing communication bandwidth... + Count: 30 | Elapsed: 210.00 milliseconds | Min: 0.02 Mbps | realtime: 0.12 Mbps | Avg: 0.18 Mbps | Max: 2.02 Mbpss + 221184 Bytes was written! + bandwidth test over! + + # 指定虚拟终端设备为/dev/pts/1,进行Ping测试,测试次数10次 + $ ./pty_test --path /dev/pts/0 --ping --loop 10 + + Count: 10 | Realtime: 384μs | Min: 121μs | Avg: 1271μs | Max: 4497μs + ping test over! + + 基于虚拟终端的测试,与基于自定义endpoint服务通信类似。只不过读写对象从endpoint变成了screen下的/dev/pts/x,用户通过对screen进行写数据,随后消息传送到对应的虚拟终端文件,随后有对应pty_thread处理数据,将数据发送给zephyr,zephyr回传数据给linux,pty_endpoint_cb接收到数据在传递给虚拟终端,最后打印到screen上与用户进行交互。其中bandwidth的测试流程如图2所示,ping测试流程可参考图2。 + +.. figure:: ../../../image/benchmark/bandwidth.png + :align: center + + 图4. bandwidth测试过程 + +4. 基于虚拟终端ping与bandwidth测试演示GIF如下: + + .. figure:: ../../../image/benchmark/pty-ping.gif + :align: center + + 图5. 基于虚拟终端ping测试的演示GIF + + .. figure:: ../../../image/benchmark/pty-bandwidth.gif + :align: center + + 图6. 基于虚拟终端bandwidth测试的演示GIF + +为其它的client os适配 benchmark +=============================== + +1. 消息结构 +------------ + + .. code:: c + + // long-ping消息结构 + struct _large_msg + { + unsigned long flag; // 用于标注是否是最后一个数据包 + unsigned long data[]; // 实际的数据,需要填充为2023 + }; + + // ping消息结构 + struct _payload{ + unsigned long num; // 数据包的序号 + unsigned long size; // 数据包的大小 + unsigned long data[]; // 实际的数据,需要填充为2023 + }; + +2. 初始化对应的endpoint +----------------------- + .. code:: c + + // benchmark的通信需要3个与linux端对应的endpoint + #define BENCHMARK_RPC_PING "rpc-ping" // 用于ping测试 + #define BENCHMARK_RPC_LONG_PING "rpc-long-ping" // 用于long-ping 测试 + #define BENCHMARK_PTY_PING "pty-ping" // 用于虚拟终端的测试 + +3. endpoint对应的callback实现 +----------------------------- + + .. code:: c + + // ping callback + static int benchmark_rpc_ping_cb(struct rpmsg_endpoint *ept, void *data, size_t len, + uint32_t src, void *priv) + { + int ret; + // 接受到的数据转换为ping消息格式 + struct _payload *msg = (struct _payload *)data; + + //验证数据是否是2023 + for (int i = 0; i < 4; i++) { + if (msg->data[i] != 2023) + return 1; + } + ret = rpmsg_service_send(rpc_ping_id, data, len); + + return 0; + } + + // long-ping callback + static int benchmark_rpc_long_ping_cb(struct rpmsg_endpoint *ept, void *data, size_t len, + uint32_t src, void *priv) + { + int ret; + // 接受到的数据转换为long-ping消息格式 + struct _large_msg *msg = (struct _large_msg *)data; + + // 验证数据是否是2023 + for (int i = 0; i < 59; i++) { + if (msg->data[i]!= 2023) + return 1; + } + ret = rpmsg_service_send(rpc_long_ping_id, data, len); + return 0; + } + + // pty callback + static int pty_ping_cb(struct rpmsg_endpoint *ept, void *data, size_t len, + uint32_t src, void *priv) + { + int ret; + + // 基于虚拟终端的通信直接将数据进行转发,不做验证 + ret = rpmsg_service_send(pty_ping_ep_id, (char *)data, len); + if (ret < 0) { + LOG_ERR("rpmsh send error\n"); + } + return 0; + } + +4. 服务初始化 +------------- + + .. code:: c + + int benchmark_rpc_service_init() + { + int ret; + + // 初始化ping服务,rpc_ping_id 是一个int类型的数字用于记录endpoint的id + ret = rpmsg_service_register_endpoint(BENCHMARK_RPC_PING, benchmark_rpc_ping_cb, NULL, &rpc_ping_id); + if (ret >= 0) { + rpc_ping_id = ret; + } else + return ret; + + // 初始化long-ping服务 + ret = rpmsg_service_register_endpoint(BENCHMARK_RPC_LONG_PING, benchmark_rpc_long_ping_cb, NULL, &rpc_long_ping_id); + if (ret >= 0) { + rpc_long_ping_id = ret; + return 0; + } else + return ret; + } + + int pty_ping_service_init() + { + int ret; + + // 初始化pty服务 + ret = rpmsg_service_register_endpoint(BENCHMARK_PTY_PING, pty_ping_cb, NULL,&pty_ping_ep_id); + if (ret >= 0) { + pty_ping_ep_id = ret; + return 0; + } else { + return ret; + } + } + + // 向内核发送消息进行初始化 + SYS_INIT(benchmark_rpc_service_init, POST_KERNEL, CONFIG_RPMSG_SERVICE_EP_REG_PRIORITY); + SYS_INIT(pty_ping_service_init, POST_KERNEL, CONFIG_RPMSG_SERVICE_EP_REG_PRIORITY); + +5. zephyr的补丁PR连接 +--------------------- + + https://gitee.com/openeuler/yocto-meta-openeuler/pulls/1402. + diff --git a/docs/source/features/mica/index.rst b/docs/source/features/mica/index.rst index 39e2bb10d39b22f17beae4bb3569f4e6cc3fcfd2..c24018f1704de87c49a4e03895a91425d6ccbc24 100644 --- a/docs/source/features/mica/index.rst +++ b/docs/source/features/mica/index.rst @@ -13,3 +13,4 @@ mica_linux_kernel.rst mica_jailhouse.rst mica_build.rst + benchmark.rst \ No newline at end of file diff --git a/docs/source/features/mica/mica_openamp.rst b/docs/source/features/mica/mica_openamp.rst index 19fedbfc192795852c590662b77f71c203865d2d..bd79bb1f5f501561bae571455fe22ece4b97d0ee 100644 --- a/docs/source/features/mica/mica_openamp.rst +++ b/docs/source/features/mica/mica_openamp.rst @@ -244,19 +244,25 @@ ok3568支持通过mcs拉起 RT-Thread,步骤如下: 之后,我们还需要编译Uniproton以及x86环境下需要的额外启动程序ap_boot, 参考 `openEuler Embedded & Uniproton x86 MICA环境安装指导 `_ 。 -在启动openEuler Embedded前,通过修改启动盘的启动分区的grub.cfg文件, +启动openEuler Embedded后,通过修改启动盘的启动分区的grub.cfg文件, 为Client OS预留出一个CPU以及内存资源。 将镜像启动分区挂载到 /mnt 目录下,然后修改 /mnt/efi/boot/grub.cfg 文件, -在 ``menuentry 'boot'`` 中添加 ``maxcpus=3`` 和 ``mem=12G`` 参数。 +在 ``menuentry 'boot'`` 中添加 ``maxcpus=3`` 和 ``memmap=256M\$0x110000000`` 参数, +限制openEuler Embedded只使用3个核心,以及预留出物理地址从0x110000000到0x11fffffff的内存资源。 .. code-block:: console + $ sudo fdisk -l + Disk /dev/sda: 14.91 GiB, 16013942784 bytes, 31277232 sectors + ... + Number Start (sector) End (sector) Size Name + 1 2048 1050623 512M boot + ... $ sudo mount /dev/sda1 /mnt - $ sudo vim /mnt/efi/boot/grub.cfg + $ sudo vi /mnt/efi/boot/grub.cfg $ sudo umount /mnt -x86工控机是4核心CPU,我们希望预留1个CPU用来运行Uniproton。 -当我们成功在x86工控机上启动openEuler Embedded以后, +当我们成功在修改启动参数并且重启以后, 可以通过以下命令查看当前CPU和内存的使用情况: .. code-block:: console @@ -265,32 +271,32 @@ x86工控机是4核心CPU,我们希望预留1个CPU用来运行Uniproton。 $ nproc 3 # 查看内存使用情况 - $ free -h - total used free shared buff/cache available - Mem: 9.9Gi 158Mi 9.8Gi 728Ki 45Mi 9.7Gi + $ cat /proc/iomem + ... + 110000000-11fffffff : Reserved + ... + -这说明当前系统正在使用3个CPU,已经预留出了一个CPU。系统总共可用的内存容量为9.9Gi,可以说明我们已经限制了Linux使用的内存容量。 -这里之所以不是12Gi是因为其他的一些内存使用比如内核预留的一些空间并不会展示在这里。 +这说明当前系统正在使用3个CPU,已经预留出了一个CPU。 +内存方面,系统已经预留出了从0x110000000到0x11fffffff的内存资源。 接下来,我们通过在openEuler Embedded上运行如下命令启动MICA: .. code-block:: console - # 调整内核打印等级 + # 调整内核打印等级(可选择不执行) $ echo "1 4 1 7" > /proc/sys/kernel/printk - # 此demo使用标准openEuler Embedded镜像,所以我们单独编译了一个mcs_km.ko - # 使用insmod而非modprobe命令插入 - # 8GB内存环境: - $ modprobe mcs_km load_addr=0x1c0000000 - # 16GB内存环境: - $ modprobe mcs_km load_addr=0x400000000 + # 此demo使用标准openEuler Embedded镜像,其中包含mica脚本 + # mica脚本位于 /usr/bin/mica + # mica脚本的使用方法可以通过 mica -h 查看 + $ mica start /path/to/executable - # 运行mica_main程序,启动 client os (8GB内存环境): - $ mica_main -c 3 -t /path/to/uniproton-x86.bin -a 0x1c0000000 -b /path/to/ap_boot - # 16GB内存环境: - $ mica_main -c 3 -t /path/to/uniproton-x86.bin -a 0x400000000 + # 若没有使用标准镜像,没有mica脚本,可以通过以下命令启动MICA: + $ insmod /path/to/mcs_km.ko rmem_base=0x110000000 rmem_size=0x10000000 + $ /path/to/mica_main -c 3 -t /path/to/executable -a 0x118000000 -b /path/to/ap_boot + # 若mica_main成功运行,会有如下打印: ... start client os ... @@ -306,6 +312,12 @@ x86工控机是4核心CPU,我们希望预留1个CPU用来运行Uniproton。 # 敲回车后,可以查看uniproton输出信息 # 可以通过 组合键退出console,具体请参考 screen 的 manual page +如果想停止当前的Client OS,可以通过以下命令: + +.. code-block:: console + + $ mica stop + ---------------- .. _mica_debug: @@ -324,31 +336,44 @@ ring buffer的地址和大小在MCS仓库中 ``library/include/mcs/mica_debug_ri .. code-block:: c - // x86 ring buffer address and size - #define MICA_DEBUG_RING_BUFFER_ADDR 0x400000000 - 0x4000 - #define MICA_DEBUG_RING_BUFFER_SIZE 0x1000 + // x86 ring buffer base address offset and size + #define RING_BUFFER_SHIFT 0x4000 + #define RING_BUFFER_SIZE 0x1000 // aarch64 ring buffer address and size - #define MICA_DEBUG_RING_BUFFER_ADDR 0x70040000 - #define MICA_DEBUG_RING_BUFFER_SIZE 0x1000 + #define RING_BUFFER_ADDR 0x70040000 + #define RING_BUFFER_SIZE 0x1000 + +x86架构下由于ring buffer存在的物理空间的首地址始终相对于Uniproton的入口地址是固定的, +在做内存映射的时候我们ring buffer的首地址可以通过Uniproton的入口地址减去 ``RING_BUFFER_SHIFT`` 得到。 ring buffer 的定义在 ``library/include/mcs/ring_buffer.h`` 文件中。 使用方法 ---------- -首先,得在指定的环境中含有MICA的openEuler Embedded镜像,请参考 :ref:`基于OpenAMP的MICA镜像构建指南 ` 。 +首先,需要构建含有MICA的openEuler Embedded镜像,请参考 :ref:`基于OpenAMP的MICA镜像构建指南 ` 。 + +然后,需要生成适配了GDB stub 的 Uniproton,参考 `UniProton GDB stub 构建指南 `_ 。 -然后,得生成适配了GDB stub 的 Uniproton,参考 `UniProton GDB stub 构建指南 `_ 。 +在运行命令时,需要在启动MICA时加上 ``-d`` 参数。 +并且,由于需要对可执行文件进行调试, ``-t`` 参数需要指定包含符号表的可执行文件的路径。 +一般来说,plain binary format的可执行文件并没有相关调试信息, +所以我们只能使用elf格式的可执行文件进行调试。 +当然,如果 ``-t`` 参数指定的是格式为plain binary format的可执行文件的路径, +调试模式仍然可以正常启动,但是在启动GDB client的时候无法正确读取符号表, +需要用 ``file`` 命令额外指定包含符号表的可执行文件的路径。 -如果希望调试Client OS,需要在启动MICA时加上 ``-d`` 参数,指定GDB stub的elf文件路径。 -以下是以内存16GB的x86工控机为例,启动MICA调试模式: +以下是启动MICA调试模式的命令: .. code-block:: console - $ modprobe mcs_km load_addr=0x400000000 - # 以16GB x86工控机为例,启动MICA调试模式: - $ mica_main -c 3 -t /path/to/uniproton_gdb_stub.bin -a 0x400000000 -b /path/to/ap_boot -d /path/to/uniproton_gdb_stub.elf + # 若使用的是标准镜像,则使用mica脚本启动MICA: + $ mica start /path/to/executable -d + # 若没有mica脚本,则使用如下命令启动MICA: + $ insmod /path/to/mcs_km.ko rmem_base=0x118000000 rmem_size=0x10000000 + # 启动MICA调试模式: + $ /path/to/mica_main -c 3 -t /path/to/executable -a 0x118000000 -b /path/to/ap_boot -d ... MICA gdb proxy server: starting... GNU gdb (GDB) 12.1 @@ -363,11 +388,13 @@ ring buffer 的定义在 ``library/include/mcs/ring_buffer.h`` 文件中。 (gdb) 此时,用户可以直接通过GDB命令行输入命令与Client OS进行交互。 -如果用户想要退出调试模式,可以直接不设置断点,输入命令 ``continue`` 。 -按下 ``ctrl-c`` 的效果和平时使用GDB时效果一致,即暂停被调试程序的运行, -并返回GDB命令行,此时用户可以输入GDB命令与Client OS进行交互。 -如果用户想要退出程序,必须在GDB命令行输入 ``quit`` 命令。 +如果用户想要通过GDB命令行像正常情况一样运行client OS,可以直接不设置断点,输入命令 ``continue`` 。 + +按下 ``ctrl-c`` 之后会返回GDB命令行,此时用户可以输入GDB命令与Client OS进行交互。 +如果用户想要退出调试模式,必须在GDB命令行输入 ``quit`` 命令。之后, +MICA会退出与调试相关的模块,并保留pty application模块,以保持和Client OS通过pty交互的能力。 +Uniproton会清除所有断点,并进入正常的运行状态。 .. note:: - 当前Uniproton的GDB stub仅支持 ``break``, ``continue``, ``print``, ``step`` 和 ``quit`` 五个命令。 + 当前Uniproton的GDB stub仅支持 ``break``, ``continue``, ``print`` 和 ``quit`` 四个命令。 并不支持 ``ctrl-c``,所以按下后虽然会返回GDB命令行,但是Uniproton仍然在运行。 \ No newline at end of file diff --git a/docs/source/features/preempt_rt.rst b/docs/source/features/preempt_rt.rst index 956e17ef4b8c37b9f6309ad8553fd2e5799a0ade..92531ad2acb45c5e0e750d1361bf3b4d45dedc7c 100644 --- a/docs/source/features/preempt_rt.rst +++ b/docs/source/features/preempt_rt.rst @@ -246,3 +246,5 @@ ____ menuentry 'boot'{ linux /bzImage root=PARTUUID=eaecae14-7021-4551-9183-29b0d210222f rw quiet } + + 如果没有``/run/media/sda1/efi/boot/grub.cfg``可以使用``fdisk -l``查看磁盘情况,使用``mount``自行挂载。 diff --git a/docs/source/getting_started/index.rst b/docs/source/getting_started/index.rst index 16e067b5e2b42c23b9d015c5795667be3bca11c3..d42e2f43479650fe24a76e6c325b49dfd8b24ae0 100644 --- a/docs/source/getting_started/index.rst +++ b/docs/source/getting_started/index.rst @@ -184,15 +184,15 @@ openEuler Embedded提供了SDK自解压安装包,包含了应用程序开发 .. tab:: openEuler - $ sudo yum install make gcc g++ flex bison gmp-devel libmpc-devel openssl-devel + $ sudo yum install make gcc g++ flex bison gmp-devel libmpc-devel openssl-devel elfutils-libelf-devel .. tab:: Ubuntu - $ sudo apt-get install make gcc g++ flex bison libgmp3-dev libmpc-dev libssl-dev + $ sudo apt-get install make gcc g++ flex bison libgmp3-dev libmpc-dev libssl-dev libelf-dev .. tab:: SUSELeap15.4 - $ sudo zypper in gcc gcc-c++ make bison gmp-devel libmpc3 openssl cmake flex + $ sudo zypper in gcc gcc-c++ make bison gmp-devel libmpc3 openssl cmake flex libelf-devel - **执行SDK自解压安装脚本** diff --git a/docs/source/index.rst b/docs/source/index.rst index 526209dfcb4fa2ce6dd6461a2fe62e690b5b0dbb..c5165fca239e41bae740c9cc40de5edbaa0e3e0a 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -29,14 +29,13 @@ openEuler Embedded在内核版本、软件包版本等代码层面会与openEule develop_help/index.rst linux/index.rst infrastructure/index.rst + references/index.rst .. toctree:: :maxdepth: 1 - :caption: oebuild指导 + :caption: oebuild 指导 - oebuild/install/index.rst - oebuild/command/index.rst - oebuild/directory/index.rst - oebuild/configure/index.rst + oebuild/intro.rst + oebuild/userguide/index.rst oebuild/develop/index.rst oebuild/release/index.rst diff --git a/docs/source/infrastructure/openeuler_fetch/index.rst b/docs/source/infrastructure/openeuler_fetch/index.rst index e2bb6e05d71a02f943ad037c32c2cfa98384c6ed..723bef134d1496d6539fc20c50ba24564dfdaec4 100644 --- a/docs/source/infrastructure/openeuler_fetch/index.rst +++ b/docs/source/infrastructure/openeuler_fetch/index.rst @@ -19,40 +19,26 @@ openeuler_fetch运行逻辑 openeuler_fetch通过以下控制变量来完成相关包下载: - - OPENEULER_GIT_URL: 远程仓库前缀,默认值为https://gitee.com/src-openeuler,该变量在.oebuild/local.conf.sample中设置,全局生效,也可以在bb或bbappend文件中设置使之局部生效 - - - OPENEULER_BRANCH: 软件包分支,在下载软件包时会通过该变量指定分支名称,该变量在.oebuild/local.conf.sample中设置,全局生效,也可以在bb或bbappend文件中设置使之局部生效 - - OPENEULER_REPO_NAME: 软件包名,该名一般和构建包名一致,但在特殊情况下需要改动,例如构建libtool-cross时,构建包名为libtool-cross,因此默认OPENEULER_REPO_NAME为libtool-cross,但是依赖包路径是libtool,则需要将OPENEULER_REPO_NAME改为libtool - OPENEULER_LOCAL_NAME: 软件包本地名称,即软件包在本地路径名称,一般该变量如果不设置则在系统处理时默认和OPENEULER_REPO_NAME一样,该变量意在解决软件包名和本地存储路径不一致问题 - - OPENEULER_SRC_URI_REMOVE: SRC_URI过滤变量,设置该变量可以在bitbake执行fetch之前移除设定的相关uri文件路径,该变量通过前缀进行匹配,例如设定OPENEULER_SRC_URI_REMOVE="https git",则openeuler_fetch在处理时遇到以https和git开头的uri则会去除 - -整体openeuler_fetch下载就是依靠以上相关变量完成,由以上变量最终组成git下载参数: - - - remote: 默认为https://gitee.com/src-openeuler/xxx,由OPENEULER_GIT_URL/OPENEULER_REPO_NAME组成 - - - branch: 默认为OPENEULER_BRANCH +整体openeuler_fetch下载就是依靠以上相关变量确定下载的包信息,而获取下载包的信息是在openEuler Embedded的基线文件中记录的,该文件目录为.oebuild/manifest.yaml,如果在基线文件中能命中该包信息,则会进行下载,否则不做任何操作。基线文件中的包信息包含该包的version,因此在命中该包后会根据version来确定该包的版本,并且为了更快的完成下载任务,我们尽可能的减少下载的代码量,因此openeuler_fetch在下载代码时其深度设定为1。在对该包的匹配过程中,如果本地可以检出该包的version,则直接切换包版本,否则进行fetch操作,然后再进行包版本检出。 -依据remote和branch,openeuler_fetch完成下载 +另外openeuler_fetch对于OPENEULER_REPO_NAME与OPENEULER_LOCAL_NAME的处理为如果设定了OPENEULER_LOCAL_NAME则选用OPENEULER_LOCAL_NAME作为reponame,用reponame来查找manifest.yaml中的相关包信息,否则选用OPENEULER_REPO_NAME作为reponame,因此对于同一个仓,由于不同的应用场景需要选用不同的分支,那么则需要设定不同的OPENEULER_LOCAL_NAME。 -openeuler_fetch 运行原理图如下: - .. image:: ../../../image/infrastructure/openeuler_fetch_process.png - -repo_init 运行原理图如下: - .. image:: ../../../image/infrastructure/openeuler_fetch_repo_init.png +例如特性M与N,都依赖a仓,但是版本分支不同,因此对于M来说,其所设定的a仓的OPENEULER_LOCAL_NAME为a-1,对于N来说,其所设定的a仓的OPENEULER_LOCAL_NAME为a-2,而manifest.yaml中需要各自记录a-1与a-2的版本信息。 如何适配其他软件包 *************************** -在构建openEuler Embedded时经常会引入其他相关包或修改非指定包版本,那么此时该如何做呢?从上文中已经得知openeuler_fetch依赖5个变量来进行下载,内核是例外,因此我们只需要关注这五个变量即可,接下来我们以busybox为例进行讲解: +在构建openEuler Embedded时经常会引入其他相关包或修改非指定包版本,那么此时该如何做呢?直接修改基线文件即可,内核是例外,接下来我们以busybox为例进行讲解: -- 如果想要某一个版本的busybox参与构建:在busybox的bbappend文件中设定OPENEULER_BRANCH值为相关版本即可 +- 如果想要某一个版本的busybox参与构建:在manifest.yaml中将busybox的version进行修改即可 -- 如果想要使用自有仓库的busybox参与构建:在busybox的bbappend文件中设定OPENEULER_GIT_URL为自有空间即可,注意:如果busybox已经下载在本地,则需要手动删除,然后再执行构建 +- 如果想要使用自有仓库的busybox参与构建:在manifest.yaml中将remote_url修改为自有仓库的链接即可 -- 如果需要其他代码仓的busybox参与构建,则修改OPENEULER_GIT_URL为其他平台仓域名即可,例如https://github.com/xxx +- 如果需要其他代码仓的busybox参与构建:同理,直接在manifest.yaml中修改对应的busybox中remote_url即可 - 另外,当构建busybox时需要的依赖并不会是某一款特定包,即不能直接通过depends添加依赖,而仅仅是需要某个路径下的文件,此时需要在bbappend中添加do_fetch:prepend,在该函数中添加需要依赖的包,例如: @@ -60,34 +46,19 @@ repo_init 运行原理图如下: python do_fetch:prepend() { - repoList = [{ - "repo_name": "yocto-embedded-tools", - "git_url": "https://gitee.com/openeuler", - "branch": "master" - },{ - "repo_name": "libboundscheck", - "git_url": "https://gitee.com/openeuler", - "branch": "openEuler-22.09" - },{ - "repo_name": "dsoftbus_standard", - "git_url": "https://gitee.com/openeuler", - "branch": "v3.1" - },{ - "repo_name": "embedded-ipc", - "git_url": "https://gitee.com/openeuler", - "branch": "master" - }] + repoList = [ + "yocto-embedded-tools", + "libboundscheck", + "dsoftbus_standard", + "embedded-ipc" + ] d.setVar("PKG_REPO_LIST", repoList) dd.build.exec_func("do_openeuler_fetchs", d) } -通过repoList设置好需要依赖的包,包结构格式不可更改,PKG_REPO_LIST变量的设定是为在do_openeuler_fetchs中获取依赖的包列表,do_openeuler_fetchs将依次解析PKG_REPO_LIST,并调用do_openeuler_fetch完成相关包的下载。 - -- 如果想要下载的busybox包在本地用其他路径,比如busyboyy,则在busybox的bb文件或bbappend文件设定OPENEULER_LOCAL_NAME="busyboyy",当clone busybox时本地路径会变成busyboyy。注意,如果本地已经有busybox,但是依然设置了OPENEULER_LOCAL_NAME,那么原本地仓将不会做任何操作,openeuler_fetch将直接新建一个busyboyy - -- 如果在编译busybox中所依赖的某些文件不想要,想统一去除,则可以在bb文件或bbappend文件中设定OPENEULER_SRC_URI_REMOVE变量,比如busybox的SRC_URI中有https或git开头的文件路径,但是我们想自己下载而不需要系统默认设定的,则可以设置OPENEULER_SRC_URI_REMOVE="https git",这样openeuler_fetch在处理时就会去除以https和git开头的文件 +通过repoList设置好需要依赖的包,同时列表中的包需要在manifest.yaml中有相关信息的记录,以以上的列表为例,我们需要在manifest.yaml中有关于yocto-embedded-tools的包信息,否则不会有任何下载功能,PKG_REPO_LIST变量的设定是为在do_openeuler_fetchs中获取依赖的包列表,do_openeuler_fetchs将依次解析PKG_REPO_LIST,并调用do_openeuler_fetch完成相关包的下载。 如何关闭openeuler_fetch功能 *************************** diff --git a/docs/source/oebuild/develop/index.rst b/docs/source/oebuild/develop/index.rst index c94130d27e3831d043beab59b7319faccca985c6..3af118e3c32724fc519ed0002c28342591531f1c 100644 --- a/docs/source/oebuild/develop/index.rst +++ b/docs/source/oebuild/develop/index.rst @@ -1,7 +1,7 @@ .. _develop_index: -开发者介绍 -######################## +开发者指南 +########## 该章节用于介绍开发者如何在oebuild上进行开发命令插件。整个oebuild的设计模式采用了对象创建型模式,主体框架已经开发完毕,因此开发者仅需要实现命令插件即可。 diff --git a/docs/source/oebuild/directory/index.rst b/docs/source/oebuild/directory/index.rst deleted file mode 100644 index 2468e9fe5665847ce18e6e449c35d2eec2337e84..0000000000000000000000000000000000000000 --- a/docs/source/oebuild/directory/index.rst +++ /dev/null @@ -1,53 +0,0 @@ -.. _directory_index: - -目录介绍 -######################## - -该章节将介绍oebuild的工作目录结构,以及每个目录的作用。oebuild工作目录的结构如下: - -:: - - .oebuild - config.yaml - compile.yaml.sample - build - aarch-std - compile.yaml - .env - src - - -.oebuild --------- - -oebuild全局配置文件存放目录,该目录是隐藏目录。 - -config.yaml ->>>>>>>>>>> - -oebuild全局配置文件,该文件中记录着构建openEuler Embedded的一些准备数据,在执行update、generate,以及bitbake命令时,都会解析该文件。 - -compile.yaml.sample ->>>>>>>>>>>>>>>>>>> - -构建配置范例文件,在oebuild对构建配置文件的处理中,可以通过generate命令输入各种参数来生成compile.yaml,也可以通过-c命令直接指定compile.yaml,而compile.yaml.sample是compile.yaml的全参数的范例文件,里面有对所有涉及到的参数的详细说明,由于对compile.yaml的定制命令行参数较多,并不直观,而对配置文件直接进行文本编辑会直观很多,对于该范例文件的使用方法比较简单,直接将该文件拷贝到某个地方,然后重命名为compile.yaml,通过编辑器打开compile.yaml,对该文件做定制化修改,然后直接在generate命令下用-c参数指定即可。关于该文件的详细介绍请参考 :ref:`compile.yaml.sample`。 - -build ------ - -构建统一存放目录,在oebuild的工作目录下,对于镜像构建目录会做统一的管理,而build目录就是用来存放所有创建的构建目录。 - -aarch-std/compile.yaml ->>>>>>>>>>>>>>>>>>>>>> - -构建配置文件,每个新创建的构建目录下都会存在一个构建配置文件,其被命名为compile.yaml,而这个文件也是判断该目录是否是构建目录的一个标准。 - -aarch-std/.env ->>>>>>>>>>>>>> - -构建目录运行环境文件,在oebuild对openEuler Embedded进行构建时会将当下启动的一些环境参数写入到.env中,该文件对构建环境的重复利用起着至关重要的作用。 - -src ---- - -源码存放目录,该目录下存放着openEuler Embedded构建下载的所有源码,源码目录的命名以openEuler Embedded的包名为准,例如软件包名为libzip,在openEuler Embedded中该包名称为zip,那么源码包目录名为zip。 diff --git a/docs/source/oebuild/install/index.rst b/docs/source/oebuild/install/index.rst deleted file mode 100644 index a35936ebb9852ee49c82d7f7393775a68f9b559f..0000000000000000000000000000000000000000 --- a/docs/source/oebuild/install/index.rst +++ /dev/null @@ -1,84 +0,0 @@ -.. _oebuild_install: - -安装介绍 -######################## - -该文档讲解如何安装并使能oebuild,该版本匹配oebuild版本为v0.0.30。 - -如何安装 -======== - -oebuild是用python语言编写,并且适配的python版本为python3。目前oebuild已经在PyPi平台发布,因此可以通过pip3命令进行安装或升级oebuild。由于openEuler Embedded的构建目前仅适配常用的x86架构,因此对于其他架构的底层硬件并不适用,同时对于x86架构的上层系统,仅支持Linux和macOS。 - -On Linux: - -.. code-block:: console - - pip3 install --user -U oebuild - -On macOS: - -.. code-block:: console - - pip3 install -U oebuild - -在安装oebuild后,就可以使用oebuild来下载openEuler Embedded相关源码了。 - -.. note:: 目前oebuild支持的最低的python3版本为python3.8。 - - -环境依赖安装 -============ - -oebuild的构建有两种方式,分别是主机端构建和容器端构建。 - -**何为主机端构建**: - -主机端构建即为直接使用主机环境进行构建,构建所需要的编译链和构建依赖工具需要在主机端进行初始化并加入到环境变量中。在构建过程中,可以直接使用主机端初始化的编译链和构建依赖工具,使用主机端构建有可能会破坏本地默认的环境配置,因此不建议使用。 - -**何为容器端构建**: - -容器端构建即为使用容器进行构建,构建所需要的编译链和构建依赖工具已经被提前内置到特定的容器中,在oebuild启动容器后会自动完成环境变量的初始化动作,然后进入构建目录,可以直接执行yocto的构建。 - -**如何安装docker依赖**: - -docker容器对Linux内核新功能的要求比较高,所以使用Ubuntu作为docker容器的宿主机更加友好一点。而且很多项目docker在配置的时候也仅仅支持了针对Ubuntu的dockerfile配置,所以容器化方面Ubuntu比较有优势。因此这里建议使用Ubuntu作为开发平台。 - -Ubuntu安装docker命令如下: - -.. code-block:: console - - sudo apt install docker.io - -在安装好docker后,由于oebuild在调用docker时会以当前用户来进行调用,因此需要将当前用户添加docker执行权限。按如下方法完成给当前用户添加docker执行权限: - -1. 添加docker用户组 - -.. code-block:: console - - sudo groupadd docker - -2. 将当前用户添加到docker用户组 - -.. code-block:: console - - sudo usermod -a -G docker - -3. 重新启动docker服务 - -.. code-block:: console - - sudo systemctl daemon-reload - - sudo systemctl restart docker - -4. 向docker套接字添加读写权限 - -.. code-block:: console - - sudo chmod o+rw /var/run/docker.sock - -.. note:: - - docker由client和server组成,docker的任何终端命令输入,实际上是通过客户端将请求发送到docker的守护进程 `docker daemon` 服务上,由 `docker daemon` 返回信息,客户端收到信息后展示在控制台上。 - 而 `/var/run/docker.sock` 是 `docker daemon` 监听的套接字socket(ip+port),容器中的进程可以通过它与 `docker daemon` 通信,对于docker的交互,可以使用官方给出的二进制cli,即docker,也可以使用实现了 `docker apis` 的client,例如python-docker,在这里由于oebuild对于docker的处理需要用到对 `/var/run/docker.sock` 的操作,因此需要对该套接字添加执行权限。 diff --git a/docs/source/oebuild/intro.rst b/docs/source/oebuild/intro.rst new file mode 100644 index 0000000000000000000000000000000000000000..896b3dd42832879d8811886208923dea6dd72942 --- /dev/null +++ b/docs/source/oebuild/intro.rst @@ -0,0 +1,15 @@ +.. _oebuild: + +简介 +#### + +`oebuild `__ 是一个用于构建和配置 openEuler Embedded 的工具, +能够为用户简化 openEuler Embedded 的构建流程,自动化生成定制化的 openEuler Embedded 发行版。 + +oebuild 的主要功能包括: + +* 自动化下载不同版本的构建依赖,包括 `yocto-meta-openeuler `_ , + `yocto-poky `_ , `yocto-meta-openembedded `_ 等。 +* 根据用户的构建选项(机器类型,功能特性等等),创建出定制化的镜像配置文件。 +* 使用容器创建一个隔离的构建环境,降低主机污染风险,简化构建系统的配置和依赖管理。 +* 启动 openEuler Embedded 镜像构建。 diff --git a/docs/source/oebuild/userguide/build/index.rst b/docs/source/oebuild/userguide/build/index.rst new file mode 100644 index 0000000000000000000000000000000000000000..80e0521d5a13dc5455d3f6714c68feff63bfcac7 --- /dev/null +++ b/docs/source/oebuild/userguide/build/index.rst @@ -0,0 +1,166 @@ +.. _oebuild_usage: + +使用指导 +######## + +本章节内容会介绍 oebuild 的具体使用方法,可根据下述步骤,了解 oebuild 的相关命令并掌握如何构建定制化的 openEuler Embedded 镜像。 + +.. note:: + + 在开始构建前,请确保构建主机满足以下条件: + + - 至少有 **50G** 以上的空闲磁盘空间,建议预留尽可能多的空间,有助于运行多个镜像构建,通过重复构建提升效率。 + - 至少有 **8G** 内存,建议使用内存、CPU数量更多的机器,增加构建速度。 + +____ + +第 1 步: 初始化工作目录 +************************ + +oebuild 的工作目录与 openEuler Embedded 版本是相关联的,构建不同版本的 openEuler Embedded,需要创建相对应的工作目录。 +因此,推荐以openEuler Embedded版本号命名工作目录,例如 `workdir_master`。当前,可以通过执行以下命令,创建工作目录: + +* ``oebuild init [-u URL] [-b BRANCH] [DIRECTORY]`` + + * ``-u ``:yocot-meta-openeuler 仓库地址,默认为 `yocto-meta-openeuler `_。 + * ``-b ``:yocot-meta-openeuler 版本分支,默认为 `master `_。 + 如需构建其它版本,请按照 :ref:`oebuild 版本信息 ` **下载对应版本的oebuild,并指定对应分支**。例如:`-b openEuler-22.03-LTS-SP2`。 + * ````:需要创建的工作目录,注意,不能指定当前目录中已有的目录,否则会报错:`mkdir failed`。 + + .. code-block:: console + + # 例如: + # 初始化 master 版本的工作目录 + $ oebuild init workdir_master + + # 初始化 openEuler-22.03-LTS-SP2 版本的工作目录 + $ oebuild init -b openEuler-22.03-LTS-SP2 workdir_2203-sp2 + +成功创建工作目录后,**切换到工作目录** 执行以下命令,下载目标版本的项目源码及构建容器: + +* ``oebuild update`` + +下载完成后,工作目录如下: + + .. code-block:: console + + $ tree -L 1 workdir_master/ + workdir_master/ + ├── oebuild.log + └── src + + | ``oebuild.log``:oebuild 的操作日志。 + | ``src``:目标版本依赖的软件包源码目录,包括 yocto-meta-openeuler、yocto-poky等。后续构建所依赖的软件包也会自动下载到该目录,包括 kernel、busybox、systemd等等。 + +____ + +第 2 步: 创建定制化的构建配置文件 +********************************* + +当前,openEuler Embedded 支持多种南向架构,包括 ARM/ARM64、X86_64、RISCV。在此基础上,oebuild 抽象封装了 openEuler Embedded 的大颗粒特性, +包括:混合部署(MICA)、图形、ROS、初始化服务(busybox or systemd)。用户可以通过 oebuild 自由组合所需特性,定制化 openEuler Embedded 版本。 + +**在 oebuild 工作目录下**,执行以下命令,创建定制化的构建配置文件: + +* ``oebuild generate -p PLATFORM [-f FEATURES] [-d DIRECTORY]`` + + * ``-p ``:选择需要构建的目标机器类型。 + * ``-f ``:选择需要打开的特性,可多次指定 -f 打开多个特性。 + * ``-d ``:构建目录,用于存放构建产物,同一构建目录支持多次重复构建。 + + .. code-block:: console + + # 例如: + # 创建支持混合部署和systemd的 qemu-aarch64 镜像构建配置文件,构建目录为 build_arm64-mcs-systemd: + $ oebuild generate -p qemu-aarch64 -f openeuler-mcs -f systemd -d build_arm64-mcs-systemd + + # 创建支持软实时和systemd的 x86-64 镜像构建配置文件,构建目录为 build_x86-rt-systemd: + $ oebuild generate -p x86-64 -f openeuler-rt -f systemd -d build_x86-rt-systemd + + .. note:: + + 可以通过执行 ``oebuild generate -l`` 查看支持的南向列表和特性列表。南向支持的帮助文档请参阅 :ref:`南向支持章节 `。 + 特性文档请参阅 :ref:`关键特性章节 `。 + +执行成功后,会在 oebuild 的工作目录下创建出 ``build`` 目录,该目录包含多个用户定制的镜像构建目录,如: + + .. code-block:: console + + $ tree build/ + build/ + ├── build_arm64-mcs-systemd + │   └── compile.yaml + └── build_x86-rt-systemd + └── compile.yaml + +不同目录下的 ``compile.yaml`` 为对应的构建配置文件。 + +.. note:: + + - | 在具体的镜像构建目录 ```` 下,可以重复触发构建,包括单个软件包的构建和镜像构建。 + + - 针对单个构建目录 ````,支持重复使用 ``oebuild generate -d `` 创建新的配置文件,以复用构建缓存加速构建,但需要注意: + + - | 一个目录对应一个 ``PLATFORM``,即上一次使用 ``-p x86-64 -d build_dir`` 创建出来的构建目录 build_dir,重新使用 ``-p qemu-aarch64 -d build_dir``,也无法复用上一次的构建缓存。 + + - | 新增特性后,需要删除构建目录 ```` 下的 ``conf`` 文件夹再进行构建。因为当 conf 存在时,不会再根据 oebuild 创建的 compile.yaml 重新生成 conf,新增特性无法生效。 + | 例如,上一次使用 ``-f systemd -d build_dir`` 在 build_dir 下创建了配置文件并完成了构建,希望重新使用 ``-f busybox -d build_dir`` 变更特性,需要同步删除 build_dir 下的 conf 文件夹,才能构建 busybox 镜像。 + +____ + +第 3 步: 构建 openEuler Embedded +******************************** + +**在** ``compile.yaml`` **的同级目录** (即第二步创建出来的构建目录)下,执行以下命令,开始构建: + +.. code-block:: console + + # 进入构建容器 + $ oebuild bitbake + + 8<-------- 进入容器环境 -------- + + # 构建 openEuler Embedded 镜像 + $ bitbake openeuler-image + + $ 构建 openEuler Embedded 的 SDK + $ bitbake openeuler-image -c do_populate_sdk + + # 构建完成后,退出容器环境 + $ exit + + 8<-------- 返回构建主机 -------- + + # 在 output 目录中可以找到构建镜像 + $ cd output/<构建时间戳> + +.. seealso:: + + 进入容器后,bitbake 的使用方法与 yocto 保持一致,一些常用命令如下: + + - ``bitbake -c cleansstate``:清理 的构建缓存,一般在重新构建 之前执行,以防止缓存影响新增的修改。 + + - ``bitbake -e > env.log``:输出关于 相关的构建环境变量到 env.log 中,一般用于帮助开发人员编写 的构建配方。 + + - ``bitbake -g``:输出 相关的构建依赖分析 pn-buildlist、task-depends.dot。 + + 关于 bitbake 命令更详细丰富的用法,请参考 `yocto bitbake manual `_。 + +____ + +进一步了解 +********** + +经过上述步骤,您已了解如何使用 oebuild 创建定制化的 openEuler Embedded 镜像配置,以及如何构建 openEuler Embedded 版本。推荐您继续阅读以下章节内容: + +- | :ref:`如何使用 openEuler Embedded SDK 进行开发 `: + | 了解 openEuler Embedded SDK 的使用方法,如何用 SDK 快速构建内核模块和用户态程序。 + +- | :ref:`openEuler Embedded 南向支持 `: + | 了解 openEuler Embedded 如何在不同的硬件平台上部署。 + +- | :ref:`openEuler Embedded 关键特性 `: + | 了解openEuler Embedded 正在进行的一些技术探索,参与社区的大颗粒特性。 + +- | :ref:`oebuild 命令手册 `: + | 了解 oebuild 的其它功能,包括如何使用自定义的软件包版本基线(manifest)、自定义的构建工具链构建 openEuler Embedded。 diff --git a/docs/source/oebuild/command/bitbake.rst b/docs/source/oebuild/userguide/command/bitbake.rst similarity index 100% rename from docs/source/oebuild/command/bitbake.rst rename to docs/source/oebuild/userguide/command/bitbake.rst diff --git a/docs/source/oebuild/command/clear.rst b/docs/source/oebuild/userguide/command/clear.rst similarity index 100% rename from docs/source/oebuild/command/clear.rst rename to docs/source/oebuild/userguide/command/clear.rst diff --git a/docs/source/oebuild/userguide/command/deploy.rst b/docs/source/oebuild/userguide/command/deploy.rst new file mode 100644 index 0000000000000000000000000000000000000000..9455736065573b144551597622393878201109a9 --- /dev/null +++ b/docs/source/oebuild/userguide/command/deploy.rst @@ -0,0 +1,25 @@ +.. _command_index_deploy: + +部署命令-deploy +############################ + +该命令用于将openEuler镜像部署到指定平台。目前该功能处于试运行阶段。 +该指令将编译或者下载的镜像文件,部署到指定平台的功能。目前仅支持qemu-system平台。 +一键执行后,命令行将直接跳转到qemu用户登录界面。 + +命令的使用范例如下: + +.. code-block:: console + + oebuild deploy [-p platform] + +-p用来指定部署目标平台架构。 + +-p: platform +-------------- + +该参数用来指定部署的目标平台架构。可选项:arm, aarch64, riscv64, x86_64。此值默认为aarch64。该参数使用方式如下: + +.. code-block:: console + + oebuild deploy -p aarch64 diff --git a/docs/source/oebuild/command/generate.rst b/docs/source/oebuild/userguide/command/generate.rst similarity index 100% rename from docs/source/oebuild/command/generate.rst rename to docs/source/oebuild/userguide/command/generate.rst diff --git a/docs/source/oebuild/command/index.rst b/docs/source/oebuild/userguide/command/index.rst similarity index 61% rename from docs/source/oebuild/command/index.rst rename to docs/source/oebuild/userguide/command/index.rst index 304694c73ccad2581b31cc6aa91c745798d3f7f4..0e4aaf02487902c771ac52cdeba9141d21c7fd3f 100644 --- a/docs/source/oebuild/command/index.rst +++ b/docs/source/oebuild/userguide/command/index.rst @@ -1,11 +1,11 @@ -.. _command_index: +.. _oebuild_command: -oebuild命令介绍 -######################## +oebuild 命令手册 +################ 该文档讲解oebuild所有相关的命令以及各命令详细的使用方法。 -oebuild目前主要有以下6个主要的使用命令: +oebuild目前主要有以下7个主要的使用命令: .. toctree:: :maxdepth: 1 @@ -16,3 +16,4 @@ oebuild目前主要有以下6个主要的使用命令: bitbake.rst manifest.rst clear.rst + deploy.rst diff --git a/docs/source/oebuild/command/init.rst b/docs/source/oebuild/userguide/command/init.rst similarity index 100% rename from docs/source/oebuild/command/init.rst rename to docs/source/oebuild/userguide/command/init.rst diff --git a/docs/source/oebuild/command/manifest.rst b/docs/source/oebuild/userguide/command/manifest.rst similarity index 100% rename from docs/source/oebuild/command/manifest.rst rename to docs/source/oebuild/userguide/command/manifest.rst diff --git a/docs/source/oebuild/command/update.rst b/docs/source/oebuild/userguide/command/update.rst similarity index 98% rename from docs/source/oebuild/command/update.rst rename to docs/source/oebuild/userguide/command/update.rst index 710219d4c8f06f0d1c15cdfbf201d530e96328bd..760573766bd46605cab1842ca3fcfd6580471f6b 100644 --- a/docs/source/oebuild/command/update.rst +++ b/docs/source/oebuild/userguide/command/update.rst @@ -5,7 +5,7 @@ 该命令用于对oebuild的构建环境做初始化准备工作,主要是对必要的启动代码和执行容器做更新操作。openEuler Embedded的构建框架采用的是yocto构建框架,yocto构建的一个特点就是分层模型,这也意味着对于特性组件可进行插拔式选用,openEuler Embedded的代码主要分为三层,如下图所示: -.. image:: ../../_static/images/command/update_yocto_layer.png +.. image:: ../../../_static/images/command/update_yocto_layer.png 最上层是主构建层,即为openEuler Embedded的源码,决定着openEuler Embedded的特性配置,第二层为构建特性相关的layer层,这里需要额外说明的是poky,poky在yocto中是主干,yocto的构建离不开poky,其他层是特性层,例如添加图形特性,那么就需要添加图形层,想要添加ros特性,那么就需要添加ros层等。第三层是openEuler Embedded依赖的包列表,主构建仓决定着依赖的其他层的版本,也决定着依赖的软件包。 diff --git a/docs/source/oebuild/configure/index.rst b/docs/source/oebuild/userguide/configure/index.rst similarity index 99% rename from docs/source/oebuild/configure/index.rst rename to docs/source/oebuild/userguide/configure/index.rst index 259d65cfbaa8be4e5071c8269c7582cf2e1d0306..b143ea3dc18dca7382e763e07e1d42c187fd9353 100644 --- a/docs/source/oebuild/configure/index.rst +++ b/docs/source/oebuild/userguide/configure/index.rst @@ -1,7 +1,7 @@ .. _configure_index: -配置文件介绍 -######################## +oebuild 配置文件 +################ 这一章节将会对openEuler Embedded所有涉及到的配置文件进行详细的讲解说明,这些说明包括每个参数的意义,以及该参数的影响范围。 diff --git a/docs/source/oebuild/userguide/index.rst b/docs/source/oebuild/userguide/index.rst new file mode 100644 index 0000000000000000000000000000000000000000..2f5d8a322c2a64fc972316aa8c18453ff67ee0a5 --- /dev/null +++ b/docs/source/oebuild/userguide/index.rst @@ -0,0 +1,15 @@ +.. _oebuild_userguide: + +用户指南 +######## + +本章将详细介绍 oebuild 的使用方法以及各项功能,并提供逐步指导和示例,帮助用户基于 oebuild 快速构建定制化的 openEuler Embedded 发行版。 + +.. toctree:: + :maxdepth: 1 + + install/index.rst + build/index.rst + oebuild_workdir/index.rst + configure/index.rst + command/index.rst diff --git a/docs/source/oebuild/userguide/install/index.rst b/docs/source/oebuild/userguide/install/index.rst new file mode 100644 index 0000000000000000000000000000000000000000..239d9b966955eed72be557924be07b35173a2242 --- /dev/null +++ b/docs/source/oebuild/userguide/install/index.rst @@ -0,0 +1,82 @@ +.. _oebuild_install: + +安装步骤 +######## + +.. note:: + + - oebuild 基于 python 实现,支持最低的 python3 版本为 **python3.8**。 + + - 当前 **仅支持在64位的x86环境** 下使用 oebuild,并且需要在 **普通用户** 下进行 oebuild 的安装运行。 + +**1. 安装并配置依赖** + + .. tabs:: + + .. code-tab:: console openEuler + + # 安装必要的软件包 + $ sudo yum install python3 python3-pip docker + + # 配置docker环境 + $ sudo usermod -a -G docker $(whoami) + $ sudo systemctl daemon-reload && sudo systemctl restart docker + $ sudo chmod o+rw /var/run/docker.sock + + .. code-tab:: console Ubuntu + + # 安装必要的软件包 + $ sudo apt-get install python3 python3-pip docker docker.io + + # 配置docker环境 + $ sudo usermod -a -G docker $(whoami) + $ sudo systemctl daemon-reload && sudo systemctl restart docker + $ sudo chmod o+rw /var/run/docker.sock + + .. code-tab:: console SUSELeap15.4 + + # 安装必要的软件包 + $ sudo zypper install python311 python311-pip docker + + # 配置docker环境 + $ sudo usermod -a -G docker $(whoami) + $ sudo systemctl restart docker + $ sudo chmod o+rw /var/run/docker.sock + $ sudo systemctl enable docker + + # 配置最新版python + $ cd /usr/bin + $ sudo rm python python3 + $ sudo ln -s python3.11 python + $ sudo ln -s python3.11 python3 + +**2. 安装对应版本的oebuild** + + 针对不同的 openEuler Embedded 版本,需要安装对应版本的 oebuild。 + openEuler Embedded 的版本与 `yocto-meta-openeuler `_ 仓库的分支是一一对应的,相关联的 oebuild 版本信息如下: + + .. _oebuild_version: + + .. list-table:: + :widths: 40 35 + :header-rows: 1 + + * - openEuler Embedded 版本 + - oebuild 版本 + * - master + - latest + * - openEuler-23.09 + - 0.0.30 + * - openEuler-22.03-LTS-SP2 + - 0.0.27 + + 执行以下命令安装 oebuild: + + .. code-block:: console + + # 对于 master 分支,安装最新版本的 oebuild: + $ pip3 install --upgrade oebuild + + # 对于其它分支,安装 版本的 oebuild: + $ pip3 install oebuild== + diff --git a/docs/source/oebuild/userguide/oebuild_workdir/index.rst b/docs/source/oebuild/userguide/oebuild_workdir/index.rst new file mode 100644 index 0000000000000000000000000000000000000000..721769bb5ae7cd99fd5ac94d81de4050f89854e1 --- /dev/null +++ b/docs/source/oebuild/userguide/oebuild_workdir/index.rst @@ -0,0 +1,55 @@ +.. _directory_index: + +oebuild 工作目录介绍 +#################### + +该章节将介绍oebuild的工作目录结构,以及每个目录的作用。oebuild工作目录的结构如下: + +:: + + . + ├── .oebuild + │   ├── compile.yaml.sample + │   └── config + │ + ├── build + │   └── build_arm64 + │   ├── compile.yaml + │   └── .env + │ + └── src + ├── yocto-meta-openembedded + ├── yocto-meta-openeuler + ├── yocto-poky + └── ...... + +.oebuild +-------- + +oebuild全局配置文件存放目录,该目录是隐藏目录。 + + **compile.yaml.sample** + + 构建配置范例文件,在oebuild对构建配置文件的处理中,可以通过generate命令输入各种参数来生成compile.yaml,也可以通过-c命令直接指定compile.yaml,而compile.yaml.sample是compile.yaml的全参数的范例文件,里面有对所有涉及到的参数的详细说明,由于对compile.yaml的定制命令行参数较多,并不直观,而对配置文件直接进行文本编辑会直观很多,对于该范例文件的使用方法比较简单,直接将该文件拷贝到某个地方,然后重命名为compile.yaml,通过编辑器打开compile.yaml,对该文件做定制化修改,然后直接在generate命令下用-c参数指定即可。关于该文件的详细介绍请参考 :ref:`compile.yaml.sample`。 + + **config** + + oebuild全局配置文件,该文件中记录着构建openEuler Embedded的一些准备数据,在执行update、generate,以及bitbake命令时,都会解析该文件。 + +build +----- + +构建统一存放目录,在oebuild的工作目录下,对于镜像构建目录会做统一的管理,而build目录就是用来存放所有创建的构建目录。 + + **build_arm64/compile.yaml** + + 构建配置文件,每个新创建的构建目录下都会存在一个构建配置文件,其被命名为compile.yaml,而这个文件也是判断该目录是否是构建目录的一个标准。 + + **build_arm64/.env** + + 构建目录运行环境文件,在oebuild对openEuler Embedded进行构建时会将当下启动的一些环境参数写入到.env中,该文件对构建环境的重复利用起着至关重要的作用。 + +src +--- + +源码存放目录,该目录下存放着openEuler Embedded构建下载的所有源码,源码目录的命名以openEuler Embedded的包名为准,例如软件包名为libzip,在openEuler Embedded中该包名称为zip,那么源码包目录名为zip。 diff --git a/docs/source/references/index.rst b/docs/source/references/index.rst new file mode 100644 index 0000000000000000000000000000000000000000..3c3b7ca5599256af8fce683a4abb8462d6fc8cbe --- /dev/null +++ b/docs/source/references/index.rst @@ -0,0 +1,26 @@ +.. _references: + +参考文献 +###################### + +当前市面上有很多关于操作系统以及Yocto的书籍,这里列出了一些书籍,以及一些网站,可以作为参考。 + +.. _books: + + [1] `Operating Systems: Three Easy Pieces `_. Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau (University of Wisconsin-Madison). + + [2] Embedded Linux Development Using Yocto Project. OTAVIO SALVADOR, DAIANE ANGOLINI. + + [3] Mastering Embedded Linux Programming. Frank Vasquez, Chris Simmonds. + + [4] Linux Kernel Development. Robert Love. + + [5] Modern Operating Systems. ANDREW S. TANENBAUM, HERBERT BOS. + + [6] `OpenAMP 文档 `_. + + [7] `飞腾嵌入式OpenAMP技术文档 `_. + + [8] `AVF架构 `_. + + [9] `Cross Linux from Scratch `_. \ No newline at end of file diff --git a/docs/source/releases/release-notes-23.09.30.rst b/docs/source/releases/release-notes-23.09.30.rst new file mode 100644 index 0000000000000000000000000000000000000000..230ce65fbc94624267f45d9297b6db453fd41320 --- /dev/null +++ b/docs/source/releases/release-notes-23.09.30.rst @@ -0,0 +1,68 @@ +:orphan: + +.. _openeuler_embedded_23_09_30: + +openEuler Embedded 23.09 +########################### + +openEuler Embedded 23.03是openEuler Embedded第四个创新版本,本版本的主要更新如下 + +* release manager: + + - 姓名:郑立铭 + + - gitee ID:soulpoet + +* 基础设施 + + - 为了openEuler Embedded下一个LTS做准备,yocto-poky从3.3.6升级到了4.0.10, yocto-poky 4.0.x也是yocto上游社区的LTS版本 + + - 进一步完善了openEuler Embedded元工具oebuild, 23.09版本发布时,对应的oebuild版本是0.0.32,具体功能可以参见文档 :ref:`oebuild_userguide` + + - 完善了CI/CD框架,CI/CD相关流程的控制文件位于 :file:`.oebuild/workflows` 目录下 + + - 使能了Yocto内核meta机制,可以更加灵活的配置内核, 具体可见 `上游社区的文档 `_ 。 + + - 完善了软件包manifest机制, 把软件包的版本与软件包仓库的的commit绑定,并持续完善对应do_openeuler_fetch机制 + + - 不断完善的文档 + +* Linux框架 + + - 内核与社区紧密在5.10内核上保持同步, 内核版本为5.10.153 + +* 关键特性 + + - 混合关键性部署框架(MICA) + + - 实现了位于Linux内核态的remote_proc和rpmsg框架的支持,为更好地支持异构多核处理器中混合部署打下了基础 + + - 实现了与Jailhouse虚拟机的初步融合 + + - 完善了用户态基于OpenAMP的实现,支持与UniProton配合的gdb调试 + + - 嵌入式弹性底座的探索 + + - 对Jailhouse更好的支持,已经实现了基于Jailhouse的openEuler Embedded与UniProton和Zephyr在多种平台下混合部署,并实现OS间的 + 有效隔离 + + - 轻量级ROS2运行时的支持也升级到ROS2-humble,并基本实现了核心软件包的支持,可以更好的开发ROS2应用 + +* 南北向生态 + + - 南向BSP: + + - 通过引入meta-rockcip, 实现了更多的Rockchip硬件支持,包括RK3588, RK3399, 并完善了RK3568的支持 + + - 支持RISC-V架构的赛昉JH7110x芯片的visionfive2开发板 + + - 规划了部分BSP平台的命名,例如qemu平台全部以qemu开头 + + - 北向软件: + + - 软件包数量支持达到450+,同时完善或者重构了很多软件包的支持 + + - 完善了isulad的支持,isulad的大部分功能在本版本中都可用 + + - 完善了嵌入式图形的支持,已经可以在x86平台上运行许多轻量级桌面组件 + diff --git a/meta-openeuler/classes/openeuler.bbclass b/meta-openeuler/classes/openeuler.bbclass index 5ef65ae435b3472dac1726f4f65d7e520e4b5f2f..12789a85b4e933dbdf1790e6ec4017b020f76eb4 100644 --- a/meta-openeuler/classes/openeuler.bbclass +++ b/meta-openeuler/classes/openeuler.bbclass @@ -81,7 +81,7 @@ BUILD_LDFLAGS:append = " -L${OPENEULER_NATIVESDK_SYSROOT}/usr/lib \ # src_uri_set is used to remove some URLs from SRC_URI through # OPENEULER_SRC_URI_REMOVE, because we don't want to download from # these URLs -python src_uri_set() { +python () { if d.getVar('OPENEULER_SRC_URI_REMOVE'): REMOVELIST = d.getVar('OPENEULER_SRC_URI_REMOVE').split(' ') URI = [] @@ -95,9 +95,6 @@ python src_uri_set() { d.setVar('SRC_URI', URI) } -addhandler src_uri_set -src_uri_set[eventmask] = "bb.event.RecipePreFinalise" - # qemu.bbclass; fix build error: the kernel is too old OLDEST_KERNEL:forcevariable = "5.10" @@ -110,28 +107,15 @@ python do_openeuler_fetchs() { # Stage the variables related to the original package repoName = d.getVar("OPENEULER_REPO_NAME") localName = d.getVar("OPENEULER_LOCAL_NAME") - gitUrl = d.getVar("OPENEULER_GIT_URL") - branch = d.getVar("OPENEULER_BRANCH") repoList = d.getVar("PKG_REPO_LIST") - for item in repoList: - d.setVar("OPENEULER_REPO_NAME", item["repo_name"]) - if "git_url" in item: - d.setVar("OPENEULER_GIT_URL", item["git_url"]) - if "branch" in item: - d.setVar("OPENEULER_BRANCH", item["branch"]) - if "local" in item: - d.setVar("OPENEULER_LOCAL_NAME", item["local"]) - else: - d.setVar("OPENEULER_LOCAL_NAME", item["repo_name"]) - + for item_name in repoList: + d.setVar("OPENEULER_REPO_NAME", item_name) bb.build.exec_func("do_openeuler_fetch", d) # Restore the variables related to the original package d.setVar("OPENEULER_REPO_NAME", repoName) d.setVar("OPENEULER_LOCAL_NAME", localName) - d.setVar("OPENEULER_GIT_URL", gitUrl) - d.setVar("OPENEULER_BRANCH", branch) } # fetch software package from openeuler's repos first, @@ -143,12 +127,15 @@ python do_openeuler_fetch() { import git from git import GitError + # if we set OPENEULER_FETCH to disable in local.conf or bb file, + # we will do nothing + if d.getVar('OPENEULER_FETCH') == "disable": + return + # get source directory where to download srcDir = d.getVar('OPENEULER_SP_DIR') repoName = d.getVar('OPENEULER_REPO_NAME') localName = d.getVar('OPENEULER_LOCAL_NAME') if d.getVar('OPENEULER_LOCAL_NAME') else repoName - gitUrl = d.getVar('OPENEULER_GIT_URL') - repoBranch = d.getVar('OPENEULER_BRANCH') urls = d.getVar("SRC_URI").split() @@ -158,7 +145,6 @@ python do_openeuler_fetch() { return repo_dir = os.path.join(srcDir, localName) - repo_url = os.path.join(gitUrl, repoName) except_str = None try: @@ -185,10 +171,7 @@ python do_openeuler_fetch() { except Exception as e: bb.plain("===============") bb.plain("OPENEULER_SP_DIR: {}".format(srcDir)) - bb.plain("OPENEULER_REPO_NAME: {}".format(repoName)) bb.plain("OPENEULER_LOCAL_NAME: {}".format(localName)) - bb.plain("OPENEULER_GIT_URL: {}".format(gitUrl)) - bb.plain("OPENEULER_BRANCH: {}".format(repoBranch)) bb.plain("===============") except_str = str(e) @@ -200,6 +183,7 @@ def init_repo_dir(repo_dir): import git repo = git.Repo.init(repo_dir) + with repo.config_writer() as wr: wr.set_value('http', 'sslverify', 'false').release() return repo @@ -222,8 +206,13 @@ def download_repo(repo_dir, repo_url ,version = None): if remote is None: remote_name = "upstream" remote = git.Remote.add(repo = repo, name = remote_name, url = repo_url) - - remote.fetch(version, depth=1) + + try: + repo.commit(version) + except: + bb.debug(1, 'commit does not exist, shallow fetch: ' + version) + remote.fetch(version, depth=1) + # if repo is modified, restore it if repo.is_dirty(): repo.git.checkout(".") @@ -242,8 +231,7 @@ def get_manifest(manifest_dir): # if success, other part of base_do_fetch will skip download as # files are already downloaded by do_openeuler_fetch python base_do_fetch:prepend() { - if not d.getVar('OPENEULER_FETCH') or d.getVar('OPENEULER_FETCH') == "enable": - bb.build.exec_func("do_openeuler_fetch", d) + bb.build.exec_func("do_openeuler_fetch", d) } python do_openeuler_clean() { diff --git a/meta-openeuler/classes/openeuler_source.bbclass b/meta-openeuler/classes/openeuler_source.bbclass index 55e5d6f265938bb3de23991b458b73a72127af61..573d50d45e8697c10fe88540578320bbd0e99fa4 100644 --- a/meta-openeuler/classes/openeuler_source.bbclass +++ b/meta-openeuler/classes/openeuler_source.bbclass @@ -5,8 +5,10 @@ def openeuler_set_version(d): if new_pv: d.setVar('PV', '%s'%new_pv) -def openeuler_get_localname(d): - return openeuler_get_item(d, 'localname', "") +def openeuler_set_localname(d): + new_localname = openeuler_get_item(d, 'localname', "") + if new_localname: + d.setVar('OPENEULER_LOCAL_NAME', '%s' % new_localname) def openeuler_get_item(d, key, default_value): pkg_name = d.getVar('BPN') @@ -27,7 +29,7 @@ def get_localname_list(maplist_dir): python set_openeuler_variable() { openeuler_set_version(d) - d.setVar('OPENEULER_LOCAL_NAME', '${@openeuler_get_localname(d)}') + openeuler_set_localname(d) if check_source_list(d): bb.build.exec_func("add_openeuler_source_uri", d) } diff --git a/meta-openeuler/conf/distro/include/openeuler_hosttools.inc b/meta-openeuler/conf/distro/include/openeuler_hosttools.inc index f8edf1e6857c01a833efd59b72c5926a1e503ff2..105cda9c430e505625d23235a730c993ac024bc6 100644 --- a/meta-openeuler/conf/distro/include/openeuler_hosttools.inc +++ b/meta-openeuler/conf/distro/include/openeuler_hosttools.inc @@ -12,7 +12,7 @@ HOSTTOOLS_NONFATAL += "cc" ASSUME_PROVIDED += "util-linux-native pkgconfig-native chrpath-replacement-native sgdisk" # package management tools -HOSTTOOLS_NONFATAL += "rpm rpmbuild createrepo_c dnf unzip rpm2cpio" +HOSTTOOLS_NONFATAL += "rpm rpmbuild createrepo_c dnf unzip rpm2cpio xzcat" ASSUME_PROVIDED += "rpm-native createrepo-c-native unzip-native" # commands used by kernel build @@ -41,7 +41,7 @@ ASSUME_PROVIDED += " pigz-native gzip-native" # gettext amd documentation related tools -HOSTTOOLS_NONFATAL += "msgfmt msgmerge makeinfo xgettext" +HOSTTOOLS_NONFATAL += "msgfmt msgmerge msgconv makeinfo xgettext envsubst gettext.sh msgattrib msgcat msgcmp msgcomm msgen msgexec msgfilter msggrep msginit msgunfmt msguniq ngettext recode-sr-latin glib-gettextize " ASSUME_PROVIDED += "texinfo-dummy-native gettext-native" # openssl tools @@ -93,18 +93,22 @@ ASSUME_PROVIDED += "cracklib-native" ASSUME_PROVIDED += "glib-2.0-native" # used by libarchive ASSUME_PROVIDED += "e2fsprogs-native" -ASSUME_PROVIDED += "file-native" + # used by binutils ASSUME_PROVIDED += "gnu-config-native" +# need perl-XML-Parser install in host ASSUME_PROVIDED += "gperf-native perl-native \ init-system-helpers \ nativesdk-glibc-locale \ gtk-doc-native \ " +HOSTTOOLS_NONFATAL += "perl" + HOSTTOOLS_NONFATAL += "dtc" ASSUME_PROVIDED += "intltool-native" +HOSTTOOLS_NONFATAL += "intltool-extract intltool-merge intltool-prepare intltool-update intltoolize" # used by wayland ASSUME_PROVIDED += "xorgproto-native expat-native" diff --git a/meta-openeuler/conf/machine/include/qemu-aarch64-common.inc b/meta-openeuler/conf/machine/include/qemu-aarch64-common.inc index d26ec3258d9d4f783211860537d9631fb9ad1314..2ec33f473c5335768ed14e3331303ced85e8a914 100644 --- a/meta-openeuler/conf/machine/include/qemu-aarch64-common.inc +++ b/meta-openeuler/conf/machine/include/qemu-aarch64-common.inc @@ -1,9 +1,7 @@ # Description: Config for arm64 machine -MACHINEOVERRIDES =. "march64:" KERNEL_IMAGETYPE =. "zImage" KERNEL_IMAGETYPE_FOR_MAKE =. "zImage Image" -require conf/machine/include/qemu-common.inc #kernel modules to install and autoload require conf/machine/include/kernel-modules-conf/common.inc @@ -24,8 +22,6 @@ require conf/machine/include/arm/arch-armv8a.inc TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'cortexa9', ' -mtune=cortex-a9', '', d)}" MACHINEOVERRIDES =. "${@bb.utils.contains('TUNE_FEATURES', 'cortexa9', 'armv7a:', '' ,d)}" -MACHINEOVERRIDES:remove:virtclass-multilib-lib32 = "march64:" -MACHINEOVERRIDES:append:virtclass-multilib-lib32 = "march32:" TUNE_FEATURES:append:virtclass-multilib-lib32 = " cortexa9" TUNE_FEATURES:remove:virtclass-multilib-lib32 = " vfp" diff --git a/meta-openeuler/conf/machine/include/qemu-arm-common.inc b/meta-openeuler/conf/machine/include/qemu-arm-common.inc index e6c857c821ef4c8e215b157c4b222dd99ff2a8aa..cc3f639e92c0fa2f67b756022dc1524d360b01a7 100644 --- a/meta-openeuler/conf/machine/include/qemu-arm-common.inc +++ b/meta-openeuler/conf/machine/include/qemu-arm-common.inc @@ -1,7 +1,8 @@ # Description: Machine description for little-endian arm32 -MACHINEOVERRIDES =. "march32:" -require conf/machine/include/qemu-common.inc +KERNEL_IMAGETYPE = "zImage" +KERNEL_IMAGETYPE_FOR_MAKE = "zImage" + require conf/machine/include/arm/arch-armv7a.inc #kernel modules to install and autoload diff --git a/meta-openeuler/conf/machine/include/qemu-common.inc b/meta-openeuler/conf/machine/include/qemu-common.inc deleted file mode 100644 index 89943981703a07060bb5dfa243401946accd6ade..0000000000000000000000000000000000000000 --- a/meta-openeuler/conf/machine/include/qemu-common.inc +++ /dev/null @@ -1,3 +0,0 @@ -MACHINEOVERRIDES =. "eulermachine:" -KERNEL_IMAGETYPE ?= "zImage" -KERNEL_IMAGETYPE_FOR_MAKE ?= "zImage" diff --git a/meta-openeuler/conf/machine/qemu-aarch64.conf b/meta-openeuler/conf/machine/qemu-aarch64.conf index 7694f85817dbfe65c7ae989081ca0d209ca143a0..df7fcde4594bfbb27dd67eeccc6f37f223345ad5 100644 --- a/meta-openeuler/conf/machine/qemu-aarch64.conf +++ b/meta-openeuler/conf/machine/qemu-aarch64.conf @@ -1,7 +1,6 @@ # Description: Machine description for little-endian aarch64 MACHINE_FEATURES += "efi" -MACHINEOVERRIDES =. "march64le:" DEFAULTTUNE = "aarch64" require conf/machine/include/qemu-aarch64-common.inc @@ -9,14 +8,14 @@ require conf/machine/include/qemu-aarch64-common.inc # need to consider compat32. TUNE_CCARGS .= " -mlittle-endian" -DEFAULTTUNE_virtclass-multilib-lib32 = "armv7a" -PACKAGE_EXTRA_ARCHS_tune-armv7a += " armv7a" -PACKAGE_EXTRA_ARCHS_virtclass-multilib-lib32 = "armv7a" +DEFAULTTUNE:virtclass-multilib-lib32 = "armv7a" +PACKAGE_EXTRA_ARCHS:tune-armv7a += " armv7a" +PACKAGE_EXTRA_ARCHS:virtclass-multilib-lib32 = "armv7a" require conf/multilib.conf # for qemu-aarch64,don't enable multilib lib32 support, # by default everything is 64 bit MULTILIBS ?= "" -DEFAULTTUNE_virtclass-multilib-ilp32 =. "aarch64_ilp32:" +DEFAULTTUNE:virtclass-multilib-ilp32 =. "aarch64_ilp32:" export ROOTFS_PACKAGE_ARCH = "aarch64" -export ROOTFS_PACKAGE_ARCH_virtclass-multilib-lib32 = "armv7l" +export ROOTFS_PACKAGE_ARCH:virtclass-multilib-lib32 = "armv7l" diff --git a/meta-openeuler/conf/machine/qemu-arm.conf b/meta-openeuler/conf/machine/qemu-arm.conf index 39cd2eff344a7a0afbc33bf7b669517ae290e7ca..2eab3ed14c1623646a5aa9e86c7fe1469da122f1 100644 --- a/meta-openeuler/conf/machine/qemu-arm.conf +++ b/meta-openeuler/conf/machine/qemu-arm.conf @@ -1,6 +1,5 @@ -# Description: Machine description for little-endian aarch64 +# Description: Machine description for little-endian arm -MACHINEOVERRIDES =. "march32le:" DEFAULTTUNE = "armv7a" require conf/machine/include/qemu-arm-common.inc diff --git a/meta-openeuler/conf/machine/qemu-riscv64.conf b/meta-openeuler/conf/machine/qemu-riscv64.conf index 9425796c326f9246b4c1807e742570eb3505531c..19c65bf4d04fbe5da7f01ab629d2219c490ff5a7 100644 --- a/meta-openeuler/conf/machine/qemu-riscv64.conf +++ b/meta-openeuler/conf/machine/qemu-riscv64.conf @@ -1,11 +1,9 @@ # Description: Config for riscv64 machine -MACHINEOVERRIDES =. "mriscv64:" DEFAULTTUNE = "riscv64" export ROOTFS_PACKAGE_ARCH = "riscv64" -require conf/machine/include/qemu-common.inc KERNEL_IMAGETYPE = "Image" KERNEL_IMAGETYPE_FOR_MAKE = "Image" diff --git a/meta-openeuler/dynamic-layers/clang-layer/recipes-support/ethercat/ethercat_%.bbappend b/meta-openeuler/dynamic-layers/clang-layer/recipes-support/ethercat/ethercat-igh_%.bbappend similarity index 100% rename from meta-openeuler/dynamic-layers/clang-layer/recipes-support/ethercat/ethercat_%.bbappend rename to meta-openeuler/dynamic-layers/clang-layer/recipes-support/ethercat/ethercat-igh_%.bbappend diff --git a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-core/glib-2.0/glibmm_%.bbappend b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-core/glib-2.0/glibmm_%.bbappend new file mode 100644 index 0000000000000000000000000000000000000000..31b6ff300b3b5bc294595a2c36c2d9eaa65fdb99 --- /dev/null +++ b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-core/glib-2.0/glibmm_%.bbappend @@ -0,0 +1,14 @@ +# main bb: yocto-meta-openembedded/meta-oe/recipes-core/glib-2.0/glibmm_2.66.2.bb + +OPENEULER_SRC_URI_REMOVE = "https http git gitsm" +OPENEULER_LOCAL_NAME = "glibmm24" + +PV = "2.66.5" + +SRC_URI += " \ + file://${OPENEULER_LOCAL_NAME}/glibmm-${PV}.tar.xz \ + file://${OPENEULER_LOCAL_NAME}/glibmm24-gcc11.patch \ +" + +S = "${WORKDIR}/glibmm-${PV}" + diff --git a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-core/libsigc++-2.0/libsigc++-2.0_%.bbappend b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-core/libsigc++-2.0/libsigc++-2.0_%.bbappend new file mode 100644 index 0000000000000000000000000000000000000000..e46b345857e0c270ebed4a79ac0ce7e43fc0869c --- /dev/null +++ b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-core/libsigc++-2.0/libsigc++-2.0_%.bbappend @@ -0,0 +1,13 @@ +# main bb: yocto-meta-openembedded/meta-oe/recipes-core/libsigc++-2.0/libsigc++-2.0_2.10.7.bb + +OPENEULER_SRC_URI_REMOVE = "https http git gitsm" +OPENEULER_LOCAL_NAME = "libsigcpp20" + +PV = "2.12.0" + +SRC_URI += " \ + file://${OPENEULER_LOCAL_NAME}/libsigc++-${PV}.tar.xz \ +" + +S = "${WORKDIR}/libsigc++-${PV}" + diff --git a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-core/mm-common/mm-common_%.bbappend b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-core/mm-common/mm-common_%.bbappend new file mode 100644 index 0000000000000000000000000000000000000000..7a07b6bbb0f1ed47cba8ca2b6cf1f4d23659edd2 --- /dev/null +++ b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-core/mm-common/mm-common_%.bbappend @@ -0,0 +1,17 @@ +# main bb: yocto-meta-openembedded/meta-oe/recipes-core/mm-common/mm-common_1.0.4.bb + +OPENEULER_SRC_URI_REMOVE = "https http git gitsm" + +PV = "1.0.5" + +# this patch just for 1.0.4 +SRC_URI:remove = " \ + file://0001-meson.build-do-not-ask-for-python-installation-versi.patch \ +" + +SRC_URI += " \ + file://mm-common-${PV}.tar.xz \ +" + +S = "${WORKDIR}/mm-common-${PV}" + diff --git a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-devtools/abseil-cpp/abseil-cpp_%.bbappend b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-devtools/abseil-cpp/abseil-cpp_%.bbappend index 777b53a9803093395be06e4f5e5d321ce9159694..80c66312a2dbc571aae3f85bc63cf40d529d9f32 100644 --- a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-devtools/abseil-cpp/abseil-cpp_%.bbappend +++ b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-devtools/abseil-cpp/abseil-cpp_%.bbappend @@ -1,24 +1,11 @@ OPENEULER_SRC_URI_REMOVE = "https http git" -PV = "20220623.1" +PV = "20230125.3" -FILESEXTRAPATHS:prepend := "${THISDIR}/files/:" - -SRC_URI = "file://abseil-cpp-${PV}.tar.gz \ - file://0001-absl-always-use-asm-sgidefs.h.patch \ - file://0002-Remove-maes-option-from-cross-compilation.patch \ - file://abseil-ppc-fixes.patch \ - file://0003-Remove-neon-option-from-cross-compilation.patch \ +SRC_URI = " \ + file://abseil-cpp-${PV}.tar.gz \ " -SRC_URI += " \ - file://backport-Do-not-leak-maes-msse4.1-into-pkgconfig.patch \ - file://abseil-cpp-20210324.2-sw.patch \ - " +EXTRA_OECMAKE += "-DABSL_ENABLE_INSTALL=ON" S = "${WORKDIR}/abseil-cpp-${PV}" - -# contains symbol link -INSANE_SKIP:${PN} += "dev-so" -FILES:${PN} += "${libdir}/libabsl_*.so*" -FILES:${PN}-dev += "${libdir}/pkgconfig" diff --git a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-devtools/abseil-cpp/files/0001-absl-always-use-asm-sgidefs.h.patch b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-devtools/abseil-cpp/files/0001-absl-always-use-asm-sgidefs.h.patch deleted file mode 100644 index 5242b29e0693bad777fb81c93ca465ba788287b4..0000000000000000000000000000000000000000 --- a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-devtools/abseil-cpp/files/0001-absl-always-use-asm-sgidefs.h.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 738549dea7a4e6c462a79962c414eaa450c2cffd Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Thu, 9 Apr 2020 13:06:27 -0700 -Subject: [PATCH 1/3] absl: always use - -Fixes mips/musl build, since sgidefs.h is not present on all C libraries -but on linux asm/sgidefs.h is there and contains same definitions, using -that makes it portable. - -Upstream-Status: Pending - -Signed-off-by: Khem Raj - ---- - absl/base/internal/direct_mmap.h | 6 +----- - 1 file changed, 1 insertion(+), 5 deletions(-) - -diff --git a/absl/base/internal/direct_mmap.h b/absl/base/internal/direct_mmap.h -index e492bb0..c8a4fba 100644 ---- a/absl/base/internal/direct_mmap.h -+++ b/absl/base/internal/direct_mmap.h -@@ -41,13 +41,9 @@ - - #ifdef __mips__ - // Include definitions of the ABI currently in use. --#if defined(__BIONIC__) || !defined(__GLIBC__) --// Android doesn't have sgidefs.h, but does have asm/sgidefs.h, which has the -+// bionic/musl C libs don't have sgidefs.h, but do have asm/sgidefs.h, which has the - // definitions we need. - #include --#else --#include --#endif // __BIONIC__ || !__GLIBC__ - #endif // __mips__ - - // SYS_mmap and SYS_munmap are not defined in Android. --- -2.25.1 - diff --git a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-devtools/abseil-cpp/files/0002-Remove-maes-option-from-cross-compilation.patch b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-devtools/abseil-cpp/files/0002-Remove-maes-option-from-cross-compilation.patch deleted file mode 100644 index 7b7244b491e6f446283e663f454724915fa43954..0000000000000000000000000000000000000000 --- a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-devtools/abseil-cpp/files/0002-Remove-maes-option-from-cross-compilation.patch +++ /dev/null @@ -1,37 +0,0 @@ -From d25cf3b9aa873595a19e197cc29ab46c0093bff1 Mon Sep 17 00:00:00 2001 -From: Sinan Kaya -Date: Mon, 3 Feb 2020 03:25:57 +0000 -Subject: [PATCH 2/3] Remove maes option from cross-compilation - ---- - absl/copts/GENERATED_AbseilCopts.cmake | 4 ---- - absl/copts/GENERATED_copts.bzl | 4 ---- - 2 files changed, 8 deletions(-) - -diff --git a/absl/copts/GENERATED_AbseilCopts.cmake b/absl/copts/GENERATED_AbseilCopts.cmake -index a4ab1aa2041e..23b9253c1f00 100644 ---- a/absl/copts/GENERATED_AbseilCopts.cmake -+++ b/absl/copts/GENERATED_AbseilCopts.cmake -@@ -158,7 +158,3 @@ list(APPEND ABSL_RANDOM_HWAES_ARM64_FLAGS - list(APPEND ABSL_RANDOM_HWAES_MSVC_X64_FLAGS - ) - --list(APPEND ABSL_RANDOM_HWAES_X64_FLAGS -- "-maes" -- "-msse4.1" --) -diff --git a/absl/copts/GENERATED_copts.bzl b/absl/copts/GENERATED_copts.bzl -index a6efc98e11d4..1e847f769501 100644 ---- a/absl/copts/GENERATED_copts.bzl -+++ b/absl/copts/GENERATED_copts.bzl -@@ -159,7 +159,3 @@ ABSL_RANDOM_HWAES_ARM64_FLAGS = [ - ABSL_RANDOM_HWAES_MSVC_X64_FLAGS = [ - ] - --ABSL_RANDOM_HWAES_X64_FLAGS = [ -- "-maes", -- "-msse4.1", --] --- -2.36.1 - diff --git a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-devtools/abseil-cpp/files/0003-Remove-neon-option-from-cross-compilation.patch b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-devtools/abseil-cpp/files/0003-Remove-neon-option-from-cross-compilation.patch deleted file mode 100644 index c0039c21079930c7fbf56237cf6fbb7102332849..0000000000000000000000000000000000000000 --- a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-devtools/abseil-cpp/files/0003-Remove-neon-option-from-cross-compilation.patch +++ /dev/null @@ -1,47 +0,0 @@ -From fb24c3e3539b5743d398a429a302a3886186f261 Mon Sep 17 00:00:00 2001 -From: Jonas Gorski -Date: Thu, 16 Jun 2022 11:46:31 +0000 -Subject: [PATCH 3/3] Remove neon option from cross compilation - -Not every arm platform supports neon instructions, so do not enforce -them. - -Signed-off-by: Jonas Gorski ---- - absl/copts/GENERATED_AbseilCopts.cmake | 4 ---- - absl/copts/GENERATED_copts.bzl | 4 ---- - 2 files changed, 8 deletions(-) - -diff --git a/absl/copts/GENERATED_AbseilCopts.cmake b/absl/copts/GENERATED_AbseilCopts.cmake -index 23b9253c1f00..5d112a97f3e4 100644 ---- a/absl/copts/GENERATED_AbseilCopts.cmake -+++ b/absl/copts/GENERATED_AbseilCopts.cmake -@@ -147,10 +147,6 @@ list(APPEND ABSL_MSVC_TEST_FLAGS - "/DNOMINMAX" - ) - --list(APPEND ABSL_RANDOM_HWAES_ARM32_FLAGS -- "-mfpu=neon" --) -- - list(APPEND ABSL_RANDOM_HWAES_ARM64_FLAGS - "-march=armv8-a+crypto" - ) -diff --git a/absl/copts/GENERATED_copts.bzl b/absl/copts/GENERATED_copts.bzl -index 1e847f769501..3e10db204faf 100644 ---- a/absl/copts/GENERATED_copts.bzl -+++ b/absl/copts/GENERATED_copts.bzl -@@ -148,10 +148,6 @@ ABSL_MSVC_TEST_FLAGS = [ - "/DNOMINMAX", - ] - --ABSL_RANDOM_HWAES_ARM32_FLAGS = [ -- "-mfpu=neon", --] -- - ABSL_RANDOM_HWAES_ARM64_FLAGS = [ - "-march=armv8-a+crypto", - ] --- -2.36.1 - diff --git a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-devtools/abseil-cpp/files/abseil-ppc-fixes.patch b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-devtools/abseil-cpp/files/abseil-ppc-fixes.patch deleted file mode 100644 index ef3f50d9e726854d9c6461200d4b6a5b6bbed468..0000000000000000000000000000000000000000 --- a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-devtools/abseil-cpp/files/abseil-ppc-fixes.patch +++ /dev/null @@ -1,79 +0,0 @@ -An all-in-one patch that fixes several issues: - -1) UnscaledCycleClock not fully implemented for ppc*-musl (disabled on musl) -2) powerpc stacktrace implementation only works on glibc (disabled on musl) -3) powerpc stacktrace implementation has ppc64 assumptions (fixed) -4) examine_stack.cpp makes glibc assumptions on powerpc (fixed) - -Sourced from void linux - -Signed-off-by: Khem Raj - ---- a/absl/base/internal/unscaledcycleclock.cc -+++ b/absl/base/internal/unscaledcycleclock.cc -@@ -20,7 +20,7 @@ - #include - #endif - --#if defined(__powerpc__) || defined(__ppc__) -+#if (defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__) - #ifdef __GLIBC__ - #include - #elif defined(__FreeBSD__) -@@ -53,7 +53,7 @@ double UnscaledCycleClock::Frequency() { - return base_internal::NominalCPUFrequency(); - } - --#elif defined(__powerpc__) || defined(__ppc__) -+#elif (defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__) - - int64_t UnscaledCycleClock::Now() { - #ifdef __GLIBC__ ---- a/absl/base/internal/unscaledcycleclock.h -+++ b/absl/base/internal/unscaledcycleclock.h -@@ -46,7 +46,8 @@ - - // The following platforms have an implementation of a hardware counter. - #if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__) || \ -- defined(__powerpc__) || defined(__ppc__) || defined(__riscv) || \ -+ ((defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__)) || \ -+ defined(__riscv) || \ - defined(_M_IX86) || (defined(_M_X64) && !defined(_M_ARM64EC)) - #define ABSL_HAVE_UNSCALED_CYCLECLOCK_IMPLEMENTATION 1 - #else ---- a/absl/debugging/internal/examine_stack.cc -+++ b/absl/debugging/internal/examine_stack.cc -@@ -33,6 +33,10 @@ - #include - #include - -+#if defined(__powerpc__) -+#include -+#endif -+ - #include "absl/base/attributes.h" - #include "absl/base/internal/raw_logging.h" - #include "absl/base/macros.h" -@@ -174,8 +178,10 @@ void* GetProgramCounter(void* const vuc) { - return reinterpret_cast(context->uc_mcontext.pc); - #elif defined(__powerpc64__) - return reinterpret_cast(context->uc_mcontext.gp_regs[32]); --#elif defined(__powerpc__) -+#elif defined(__powerpc__) && defined(__GLIBC__) - return reinterpret_cast(context->uc_mcontext.uc_regs->gregs[32]); -+#elif defined(__powerpc__) -+ return reinterpret_cast((context->uc_regs)->gregs[32]); - #elif defined(__riscv) - return reinterpret_cast(context->uc_mcontext.__gregs[REG_PC]); - #elif defined(__s390__) && !defined(__s390x__) ---- a/absl/debugging/internal/stacktrace_config.h -+++ b/absl/debugging/internal/stacktrace_config.h -@@ -60,7 +60,7 @@ - #elif defined(__i386__) || defined(__x86_64__) - #define ABSL_STACKTRACE_INL_HEADER \ - "absl/debugging/internal/stacktrace_x86-inl.inc" --#elif defined(__ppc__) || defined(__PPC__) -+#elif (defined(__ppc__) || defined(__PPC__)) && defined(__GLIBC__) - #define ABSL_STACKTRACE_INL_HEADER \ - "absl/debugging/internal/stacktrace_powerpc-inl.inc" - #elif defined(__aarch64__) diff --git a/meta-openeuler/recipes-extended/haveged/files/haveged.init b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-extended/haveged/files/haveged.init similarity index 100% rename from meta-openeuler/recipes-extended/haveged/files/haveged.init rename to meta-openeuler/dynamic-layers/openembedded-layer/recipes-extended/haveged/files/haveged.init diff --git a/meta-openeuler/recipes-extended/haveged/files/haveged.service b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-extended/haveged/files/haveged.service similarity index 100% rename from meta-openeuler/recipes-extended/haveged/files/haveged.service rename to meta-openeuler/dynamic-layers/openembedded-layer/recipes-extended/haveged/files/haveged.service diff --git a/meta-openeuler/recipes-extended/haveged/haveged_%.bbappend b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-extended/haveged/haveged_%.bbappend similarity index 100% rename from meta-openeuler/recipes-extended/haveged/haveged_%.bbappend rename to meta-openeuler/dynamic-layers/openembedded-layer/recipes-extended/haveged/haveged_%.bbappend diff --git a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-gnome/atk/atkmm_%.bbappend b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-gnome/atk/atkmm_%.bbappend new file mode 100644 index 0000000000000000000000000000000000000000..81a8e3120a0a04ec795c6c6fb3222d219b2c86de --- /dev/null +++ b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-gnome/atk/atkmm_%.bbappend @@ -0,0 +1,12 @@ +# main bb: yocto-meta-openembedded/meta-oe/recipes-gnome/atk/atkmm_2.28.2.bb + +OPENEULER_SRC_URI_REMOVE = "https http git gitsm" + +PV = "2.28.3" + +SRC_URI += " \ + file://atkmm-${PV}.tar.xz \ +" + +S = "${WORKDIR}/atkmm-${PV}" + diff --git a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-gnome/gtk+/gtkmm3_%.bbappend b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-gnome/gtk+/gtkmm3_%.bbappend new file mode 100644 index 0000000000000000000000000000000000000000..5b0d60675e00b26aa7782ff02f5563fd1346d6c6 --- /dev/null +++ b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-gnome/gtk+/gtkmm3_%.bbappend @@ -0,0 +1,13 @@ +# main bb: yocto-meta-openembedded/meta-oe/recipes-gnome/gtk+/gtkmm3_3.24.5.bb + +OPENEULER_SRC_URI_REMOVE = "https http git gitsm" +OPENEULER_LOCAL_NAME = "gtkmm30" + +PV = "3.24.7" + +SRC_URI += " \ + file://${OPENEULER_LOCAL_NAME}/gtkmm-${PV}.tar.xz \ +" + +S = "${WORKDIR}/gtkmm-${PV}" + diff --git a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-graphics/cairo/cairomm_%.bbappend b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-graphics/cairo/cairomm_%.bbappend new file mode 100644 index 0000000000000000000000000000000000000000..f04b3f40847796c3b318c5fed3dde55dc336e677 --- /dev/null +++ b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-graphics/cairo/cairomm_%.bbappend @@ -0,0 +1,12 @@ +# main bb: yocto-meta-openembedded/meta-oe/recipes-graphics/cairo/cairomm_1.14.3.bb + +OPENEULER_SRC_URI_REMOVE = "https http git gitsm" + +PV = "1.14.4" + +SRC_URI += " \ + file://cairomm-${PV}.tar.xz \ +" + +S = "${WORKDIR}/cairomm-${PV}" + diff --git a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-graphics/cglm/cglm_%.bbappend b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-graphics/cglm/cglm_%.bbappend new file mode 100644 index 0000000000000000000000000000000000000000..7ff1883e574074f8ba424630f6e9759628ee5e29 --- /dev/null +++ b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-graphics/cglm/cglm_%.bbappend @@ -0,0 +1,16 @@ +# main bb: meta-openembedded/tree/meta-oe/recipes-graphics/cglm/cglm_0.9.1.bb +# from https://git.openembedded.org/ + +OPENEULER_SRC_URI_REMOVE = "https http git" + +FILESEXTRAPATHS:prepend := "${THISDIR}/files/:" + +PV = "0.9.1" + +SRC_URI += " \ + file://cglm-${PV}.tar.gz \ +" + +S = "${WORKDIR}/cglm-${PV}" + + diff --git a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-graphics/cglm/cglm_0.9.1.bb b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-graphics/cglm/cglm_0.9.1.bb new file mode 100644 index 0000000000000000000000000000000000000000..603ebe48d19e6e9f55260ea1c1389dacc8b59f63 --- /dev/null +++ b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-graphics/cglm/cglm_0.9.1.bb @@ -0,0 +1,25 @@ +SUMMARY = "OpenGL Mathematics Library for C" +DESCRIPTION = "Highly optimized 2D|3D math library, also known as OpenGL Mathematics (glm) for `C`. \ +cglm provides lot of utils to help math operations to be fast and quick to write. It is community \ +friendly, feel free to bring any issues, bugs you faced." +HOMEPAGE = "https://github.com/recp/cglm" +BUGTRACKER = "https://github.com/recp/cglm/issues" +SECTION = "libs" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://LICENSE;md5=8dc95c4110ba741c43832734b51b7de7" + +SRC_URI = "git://github.com/recp/cglm;branch=master;protocol=https" +# Tag v0.9.1 +SRCREV = "cdd4d0e83e9ee79f73aeb0a4fb60b4abd8ecf947" + +S = "${WORKDIR}/git" + +PACKAGECONFIG[build_tests] = "-Dbuild_tests=true,-Dbuild_tests=false," + +PACKAGECONFIG ?= "" + +inherit meson pkgconfig + +EXTRA_OEMESON += "--buildtype release" + +BBCLASSEXTEND = "native" diff --git a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-graphics/cglm/files/cglm-0.9.1.tar.gz b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-graphics/cglm/files/cglm-0.9.1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..15318d6a69eafd48b76c82e4f95ee5585e1c570d Binary files /dev/null and b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-graphics/cglm/files/cglm-0.9.1.tar.gz differ diff --git a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-graphics/glm/glm_%.bbappend b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-graphics/glm/glm_%.bbappend new file mode 100644 index 0000000000000000000000000000000000000000..7ff91e3236db321d2042fa69187a2d8fa0a0ff14 --- /dev/null +++ b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-graphics/glm/glm_%.bbappend @@ -0,0 +1,13 @@ +# main bb: yocto-meta-openembedded/meta-oe/recipes-graphics/glm/glm_0.9.9.8.bb + +OPENEULER_SRC_URI_REMOVE = "https http git gitsm" + +PV = "0.9.9.8" + +SRC_URI += " \ + file://glm-${PV}.tar.gz \ + file://fix-tests-big-endian-and-installation.patch \ +" + +S = "${WORKDIR}/glm-${PV}" + diff --git a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-graphics/pango/pangomm_%.bbappend b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-graphics/pango/pangomm_%.bbappend new file mode 100644 index 0000000000000000000000000000000000000000..cb60d1b7cc0cec925a230a77e43581e3303e3849 --- /dev/null +++ b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-graphics/pango/pangomm_%.bbappend @@ -0,0 +1,12 @@ +# main bb: yocto-meta-openembedded/meta-oe/recipes-graphics/pango/pangomm_2.46.2.bb + +OPENEULER_SRC_URI_REMOVE = "https http git gitsm" + +PV = "2.46.3" + +SRC_URI += " \ + file://pangomm-${PV}.tar.xz \ +" + +S = "${WORKDIR}/pangomm-${PV}" + diff --git a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-support/glog/files/0001-Find-Libunwind-during-configure.patch b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-support/glog/files/0001-Find-Libunwind-during-configure.patch deleted file mode 100644 index 15cf67fd2ead627e432c8bec68b421cd5ccd4e2c..0000000000000000000000000000000000000000 --- a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-support/glog/files/0001-Find-Libunwind-during-configure.patch +++ /dev/null @@ -1,120 +0,0 @@ -diff -uNr a/cmake/FindLibunwind.cmake b/cmake/FindLibunwind.cmake ---- a/cmake/FindLibunwind.cmake 1970-01-01 01:00:00.000000000 +0100 -+++ b/cmake/FindLibunwind.cmake 2018-11-20 15:53:48.799078114 +0100 -@@ -0,0 +1,54 @@ -+# - Try to find libunwind -+# Once done this will define -+# -+# Libunwind_FOUND - system has libunwind -+# unwind - cmake target for libunwind -+ -+find_library (UNWIND_LIBRARY NAMES unwind DOC "unwind library") -+include (CheckIncludeFile) -+check_include_file (libunwind.h HAVE_LIBUNWIND_H) -+check_include_file (unwind.h HAVE_UNWIND_H) -+ -+if (CMAKE_SYSTEM_PROCESSOR MATCHES "^arm") -+ set(LIBUNWIND_ARCH "arm") -+elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^aarch64") -+ set(LIBUNWIND_ARCH "aarch64") -+elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR -+ CMAKE_SYSTEM_PROCESSOR STREQUAL "amd64" OR -+ CMAKE_SYSTEM_PROCESSOR STREQUAL "corei7-64") -+ set(LIBUNWIND_ARCH "x86_64") -+elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^i.86$") -+ set(LIBUNWIND_ARCH "x86") -+elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^ppc64") -+ set(LIBUNWIND_ARCH "ppc64") -+elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^ppc") -+ set(LIBUNWIND_ARCH "ppc32") -+elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^mips") -+ set(LIBUNWIND_ARCH "mips") -+elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^hppa") -+ set(LIBUNWIND_ARCH "hppa") -+elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^ia64") -+ set(LIBUNWIND_ARCH "ia64") -+endif() -+ -+find_library (UNWIND_LIBRARY_PLATFORM NAMES "unwind-${LIBUNWIND_ARCH}" DOC "unwind library platform") -+if (UNWIND_LIBRARY_PLATFORM) -+ set(HAVE_LIB_UNWIND "1") -+endif() -+ -+include(FindPackageHandleStandardArgs) -+# handle the QUIETLY and REQUIRED arguments and set Libunwind_FOUND to TRUE -+# if all listed variables are TRUE -+find_package_handle_standard_args(Libunwind DEFAULT_MSG -+ UNWIND_LIBRARY HAVE_LIBUNWIND_H HAVE_UNWIND_H HAVE_LIB_UNWIND) -+ -+mark_as_advanced (UNWIND_LIBRARY UNWIND_LIBRARY_PLATFORM) -+ -+if (Libunwind_FOUND) -+ add_library(unwind INTERFACE IMPORTED) -+ set_target_properties(unwind PROPERTIES -+ INTERFACE_LINK_LIBRARIES "${UNWIND_LIBRARY};${UNWIND_LIBRARY_PLATFORM}" -+ ) -+else() -+ message("Can't find libunwind library") -+endif() -diff -uNr a/CMakeLists.txt b/CMakeLists.txt ---- a/CMakeLists.txt 2018-11-20 15:49:07.576278417 +0100 -+++ b/CMakeLists.txt 2018-11-20 15:49:32.106819928 +0100 -@@ -58,7 +58,6 @@ - check_include_file (execinfo.h HAVE_EXECINFO_H) - check_include_file (glob.h HAVE_GLOB_H) - check_include_file (inttypes.h HAVE_INTTYPES_H) --check_include_file (libunwind.h HAVE_LIBUNWIND_H) - check_include_file (memory.h HAVE_MEMORY_H) - check_include_file (pwd.h HAVE_PWD_H) - check_include_file (stdint.h HAVE_STDINT_H) -@@ -74,7 +73,6 @@ - check_include_file (syslog.h HAVE_SYSLOG_H) - check_include_file (ucontext.h HAVE_UCONTEXT_H) - check_include_file (unistd.h HAVE_UNISTD_H) --check_include_file (unwind.h HAVE_UNWIND_H) - - check_include_file_cxx ("ext/hash_map" HAVE_EXT_HASH_MAP) - check_include_file_cxx ("ext/hash_set" HAVE_EXT_HASH_SET) -@@ -109,10 +107,7 @@ - # snprintf as an inline function - check_symbol_exists (snprintf stdio.h HAVE_SNPRINTF) - --check_library_exists (unwind get_static_proc_name "" HAVE_LIB_UNWIND) -- --find_library (UNWIND_LIBRARY NAMES unwind DOC "unwind library") --mark_as_advanced (UNWIND_LIBRARY) -+find_package(Libunwind) - - check_c_source_compiles (" - #include -@@ -376,9 +371,9 @@ - - set_target_properties (glog PROPERTIES POSITION_INDEPENDENT_CODE ON) - --if (UNWIND_LIBRARY) -- target_link_libraries (glog PUBLIC ${UNWIND_LIBRARY}) --endif (UNWIND_LIBRARY) -+if (Libunwind_FOUND) -+ target_link_libraries (glog PUBLIC unwind) -+endif (Libunwind_FOUND) - - if (HAVE_PTHREAD) - target_link_libraries (glog PUBLIC ${CMAKE_THREAD_LIBS_INIT}) -@@ -571,6 +566,7 @@ - install (FILES - ${CMAKE_CURRENT_BINARY_DIR}/glog-config.cmake - ${CMAKE_CURRENT_BINARY_DIR}/glog-config-version.cmake -+ ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindLibunwind.cmake - DESTINATION lib/cmake/glog) - - install (EXPORT glog-targets NAMESPACE glog:: DESTINATION lib/cmake/glog) -diff -uNr a/glog-config.cmake.in b/glog-config.cmake.in ---- a/glog-config.cmake.in 2018-11-20 15:49:07.576278417 +0100 -+++ b/glog-config.cmake.in 2018-11-20 15:52:32.330418489 +0100 -@@ -4,4 +4,6 @@ - - @gflags_DEPENDENCY@ - -+find_dependency (Libunwind) -+ - include ("${CMAKE_CURRENT_LIST_DIR}/glog-targets.cmake") diff --git a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-support/glog/glog_%.bbappend b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-support/glog/glog_%.bbappend index 7232014d00e7562eda97b2155fdf841b2a2dcd43..992b41ddc7112ada87ef8702381445a58285d985 100644 --- a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-support/glog/glog_%.bbappend +++ b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-support/glog/glog_%.bbappend @@ -1,26 +1,16 @@ -# main bbfile: yocto-meta-openembedded/meta-oe/recipes-support/glog/glog_0.4.0.bb - -FILESEXTRAPATHS:prepend := "${THISDIR}/files/:" - +# main bbfile: yocto-meta-openembedded/meta-oe/recipes-support/glog/glog_0.5.0.bb OPENEULER_SRC_URI_REMOVE = "https git" -OPENEULER_REPO_NAME = "glog" - # version in openEuler -PV = "0.3.5" +PV = "0.6.0" S = "${WORKDIR}/glog-${PV}" -# files, patches can't be applied in openeuler or conflict with openeuler -SRC_URI:remove = " \ - file://libexecinfo.patch \ -" - -# files, patches that come from openeuler -SRC_URI:prepend = " \ +SRC_URI = " \ file://glog-${PV}.tar.gz \ " -SRC_URI[md5sum] = "5df6d78b81e51b90ac0ecd7ed932b0d4" -SRC_URI[sha256sum] = "7580e408a2c0b5a89ca214739978ce6ff480b5e7d8d7698a2aa92fadc484d1e0" +# From meta-openembedded, glog_0.6.0.bb +PACKAGECONFIG[64bit-atomics] = ",-DCMAKE_CXX_STANDARD_LIBRARIES='-latomic',," +FILES:${PN}-dev += "${datadir}/${BPN}/cmake" # make libs compatible with lib64 do_configure:prepend:class-target() { diff --git a/meta-openeuler/dynamic-layers/openembedded-layer/recipes-support/hwdata/hwdata_%.bbappend b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-support/hwdata/hwdata_%.bbappend new file mode 100644 index 0000000000000000000000000000000000000000..3e67420c255ae96effaf0d8eaec120b9af209295 --- /dev/null +++ b/meta-openeuler/dynamic-layers/openembedded-layer/recipes-support/hwdata/hwdata_%.bbappend @@ -0,0 +1,19 @@ +inherit pkgconfig + +PV = "v0.370" + +OPENEULER_SRC_URI_REMOVE = "https git" + +SRC_URI += " \ + file://v0.370.tar.gz \ +" + +S = "${WORKDIR}/hwdata-0.370" + +do_install:append() { + install -d ${D}${libdir}/pkgconfig/ + install -m 0644 ${S}/hwdata.pc ${D}${libdir}/pkgconfig/ +} + +BBCLASSEXTEND += "native" + diff --git a/meta-openeuler/dynamic-layers/qt5-layer/recipes-qt/packagegroups/packagegroup-qt.bb b/meta-openeuler/dynamic-layers/qt5-layer/recipes-qt/packagegroups/packagegroup-qt.bb index 2b6e845f29207d81e897c9f6222db7379066740c..ea68e193e03799c384cebb4888a6745dd1e7b94f 100644 --- a/meta-openeuler/dynamic-layers/qt5-layer/recipes-qt/packagegroups/packagegroup-qt.bb +++ b/meta-openeuler/dynamic-layers/qt5-layer/recipes-qt/packagegroups/packagegroup-qt.bb @@ -9,9 +9,10 @@ PACKAGES = "${PN}" RDEPENDS:${PN} = " \ weston \ +weston-examples \ qtwayland \ qtbase \ kmscube \ -${@bb.utils.contains('DISTRO_FEATURES', 'x11 opengl', 'gtk+3 wxwidgets', 'qt5-opengles2-test', d)} \ helloworld-gui \ +${@bb.utils.contains('DISTRO_FEATURES', 'x11 opengl', 'weston-xwayland gtk+3 gtk+3-demo wxwidgets', 'qt5-opengles2-test', d)} \ " diff --git a/meta-openeuler/dynamic-layers/ros2-layer/recipes-ros/fastrtps/fastrtps_%.bbappend b/meta-openeuler/dynamic-layers/ros2-layer/recipes-ros/fastrtps/fastrtps_%.bbappend new file mode 100644 index 0000000000000000000000000000000000000000..e780810290626893cd08c3263313f0c65e388ea9 --- /dev/null +++ b/meta-openeuler/dynamic-layers/ros2-layer/recipes-ros/fastrtps/fastrtps_%.bbappend @@ -0,0 +1,5 @@ +# set "SM_RUN_RESULT" and "SM_RUN_RESULT__TRYRUN_OUTPUT" to fix: +# | CMake Error: TRY_RUN() invoked in cross-compiling mode, please set the following cache variables appropriately: +# | SM_RUN_RESULT (advanced) +# | SM_RUN_RESULT__TRYRUN_OUTPUT (advanced) +EXTRA_OECMAKE += "-DSM_RUN_RESULT=false -DSM_RUN_RESULT__TRYRUN_OUTPUT=false" diff --git a/meta-openeuler/dynamic-layers/ros2-layer/recipes-ros/suitesparse/suitesparse_%.bbappend b/meta-openeuler/dynamic-layers/ros2-layer/recipes-ros/suitesparse/suitesparse_%.bbappend index 99c8028df2fa515bf7700b9b72a57aaeb40c1ce8..a8d4e9e7cde5d2bcb2219d425852b90d9eebd317 100644 --- a/meta-openeuler/dynamic-layers/ros2-layer/recipes-ros/suitesparse/suitesparse_%.bbappend +++ b/meta-openeuler/dynamic-layers/ros2-layer/recipes-ros/suitesparse/suitesparse_%.bbappend @@ -1,5 +1,6 @@ # reference: yocto-meta-openembedded/meta-oe/recipes-devtools/suitesparse/suitesparse_5.10.1.bb OPENEULER_SRC_URI_REMOVE = "https http git" +inherit ros_distro_humble PV = "5.10.1" @@ -13,4 +14,41 @@ SRC_URI:remove = "git://github.com/DrTimothyAldenDavis/SuiteSparse;protocol=http file://0003-Add-version-information-to-libmetis.patch \ " SRC_URI:prepend = "file://SuiteSparse-${PV}.tar.gz \ -" \ No newline at end of file +" + +FILES:${PN} += "${libdir}/libmetis.so" +FILES:${PN}-dev = " \ +${includedir} \ +${libdir}/libamd.so \ +${libdir}/libamd.so.2 \ +${libdir}/libbtf.so \ +${libdir}/libbtf.so.1 \ +${libdir}/libcamd.so \ +${libdir}/libcamd.so.2 \ +${libdir}/libccolamd.so \ +${libdir}/libccolamd.so.2 \ +${libdir}/libcholmod.so \ +${libdir}/libcholmod.so.3 \ +${libdir}/libcolamd.so \ +${libdir}/libcolamd.so.2 \ +${libdir}/libcxsparse.so \ +${libdir}/libcxsparse.so.3 \ +${libdir}/libgraphblas.so \ +${libdir}/libgraphblas.so.5 \ +${libdir}/libklu.so \ +${libdir}/libklu.so.1 \ +${libdir}/libldl.so \ +${libdir}/libldl.so.2 \ +${libdir}/libmongoose.so \ +${libdir}/libmongoose.so.2 \ +${libdir}/librbio.so \ +${libdir}/librbio.so.2 \ +${libdir}/libsliplu.so \ +${libdir}/libsliplu.so.1 \ +${libdir}/libspqr.so \ +${libdir}/libspqr.so.2 \ +${libdir}/libsuitesparseconfig.so \ +${libdir}/libsuitesparseconfig.so.5 \ +${libdir}/libumfpack.so \ +${libdir}/libumfpack.so.5 \ +" diff --git a/meta-openeuler/recipes-bsp/intel-cmt-cat/intel-cmt-cat_%.bbappend b/meta-openeuler/recipes-bsp/intel-cmt-cat/intel-cmt-cat_%.bbappend new file mode 100644 index 0000000000000000000000000000000000000000..8240d501b6092676ae63df53b4ea4e5962fc0b33 --- /dev/null +++ b/meta-openeuler/recipes-bsp/intel-cmt-cat/intel-cmt-cat_%.bbappend @@ -0,0 +1,15 @@ +# main bb: meta-intel/recipes-bsp/intel-cmt-cat/intel-cmt-cat_4.6.0.bb +# ref: git://git.yoctoproject.org/meta-intel + +OPENEULER_SRC_URI_REMOVE = "https http git gitsm" + +FILESEXTRAPATHS:prepend := "${THISDIR}/files/:" + +PV = "4.6.0" + +SRC_URI += " \ + file://v${PV}.tar.gz \ +" + +S = "${WORKDIR}/intel-cmt-cat-${PV}" + diff --git a/meta-openeuler/recipes-bsp/intel-cmt-cat/intel-cmt-cat_4.6.0.bb b/meta-openeuler/recipes-bsp/intel-cmt-cat/intel-cmt-cat_4.6.0.bb new file mode 100644 index 0000000000000000000000000000000000000000..c613c99717d1a71f1b5d7edb3c1d0e53fdd4936c --- /dev/null +++ b/meta-openeuler/recipes-bsp/intel-cmt-cat/intel-cmt-cat_4.6.0.bb @@ -0,0 +1,30 @@ +SUMMARY = "intel-cmt-cat" +DESCRIPTION = "Software package which provides basic support for Intel(R) \ +Resource Director Technology (Intel(R) RDT)" +HOMEPAGE = "https://github.com/intel/intel-cmt-cat" + +LICENSE = "BSD-3-Clause" +LIC_FILES_CHKSUM = "file://LICENSE;md5=4b63c65942e1c16fd897f8cd20abebf8" + +SRC_URI = "git://github.com/intel/intel-cmt-cat;protocol=https;branch=master" +SRCREV = "18f4c7dd141a9526c6b588da30720e7a03dd7b2f" + +S = "${WORKDIR}/git" + +COMPATIBLE_HOST = '(x86_64).*-linux' +COMPATIBLE_HOST:libc-musl = "null" + +do_install() { + oe_runmake install PREFIX=${D}${prefix} NOLDCONFIG=y +} + +FILES:${PN} += "${nonarch_libdir}/libpqos*" +FILES:${PN}-doc = "/usr/man*" + +INSANE_SKIP:${PN} += "ldflags" +INSANE_SKIP:${PN} += "dev-so" +INSANE_SKIP:${PN} += "libdir" +INSANE_SKIP:${PN} += "already-stripped" + +INHIBIT_PACKAGE_DEBUG_SPLIT = "1" + diff --git a/meta-openeuler/recipes-core/busybox/busybox_%.bbappend b/meta-openeuler/recipes-core/busybox/busybox_%.bbappend index e558aab7b76b4165770e94769e90af1eac5ea1ab..0c8ddd626116e6d1b34e2ac5537530dc188ada78 100644 --- a/meta-openeuler/recipes-core/busybox/busybox_%.bbappend +++ b/meta-openeuler/recipes-core/busybox/busybox_%.bbappend @@ -27,6 +27,7 @@ SRC_URI:append = " \ file://init.cfg \ file://rcS.default \ file://mdev.cfg \ + ${@bb.utils.contains('IMAGE_FEATURES', 'debug-tweaks', 'file://devmem.cfg', '', d)} \ " # support NFS, which depends on libtirpc diff --git a/meta-openeuler/recipes-core/busybox/files/devmem.cfg b/meta-openeuler/recipes-core/busybox/files/devmem.cfg new file mode 100644 index 0000000000000000000000000000000000000000..174a3f2030123ef1e857670dfd6fe322135b3a30 --- /dev/null +++ b/meta-openeuler/recipes-core/busybox/files/devmem.cfg @@ -0,0 +1 @@ +CONFIG_DEVMEM=y diff --git a/meta-openeuler/recipes-core/dsoftbus/dsoftbus_1.0.bb b/meta-openeuler/recipes-core/dsoftbus/dsoftbus_1.0.bb index 0495fb9b09e865482af4b8e13cbc289d3dc86827..7bba54ca00ceff739ad56e3dffd1ba19c902faba 100644 --- a/meta-openeuler/recipes-core/dsoftbus/dsoftbus_1.0.bb +++ b/meta-openeuler/recipes-core/dsoftbus/dsoftbus_1.0.bb @@ -35,6 +35,7 @@ SRC_URI = " \ file://dsoftbus/build-0001-add-dsoftbus-build-support-for-embedded-env.patch;patchdir=${S}/build \ file://dsoftbus/build-0002-support-hichian-for-openeuler.patch;patchdir=${S}/build \ file://dsoftbus/build-0003-add-deviceauth-ipc-sdk-compile.patch;patchdir=${S}/build \ + file://dsoftbus/dsoftbus-standard-0002-fix-mutex-build-error-for-dsoftbus-standard.patch;patchdir=${dsoftbus-src}/dsoftbus \ file://dsoftbus/security-device-auth-0001-deviceauth-for-openeuler.patch;patchdir=${dsoftbus-hichain}/deviceauth \ file://dsoftbus/security-device-auth-0002-deviceauth-ipc-service.patch;patchdir=${dsoftbus-hichain}/deviceauth \ file://dsoftbus/security-device-auth-0003-simplify-dependency-on-third-party-packages.patch;patchdir=${dsoftbus-hichain}/deviceauth \ @@ -47,6 +48,7 @@ SRC_URI = " \ file://dsoftbus/third-party-mbedtls-0001-Adaptation-for-dsoftbus.patch;patchdir=${dsoftbus-thirdparty}/mbedtls \ file://dsoftbus/third-party-mbedtls-0002-fix-CVE-2021-43666.patch;patchdir=${dsoftbus-thirdparty}/mbedtls \ file://dsoftbus/third-party-mbedtls-0002-fix-CVE-2021-45451.patch;patchdir=${dsoftbus-thirdparty}/mbedtls \ + file://dsoftbus/third-party-libcoap-0003-fix-CVE-2023-30364.patch;patchdir=${dsoftbus-thirdparty}/libcoap \ file://dsoftbus/depend-0001-add-productdefine-for-openeuler.patch;patchdir=${dsoftbus-productdefine}/ \ file://dsoftbus/depend-0002-add-depend-for-openeuler.patch;patchdir=${dsoftbus-depend} \ " @@ -68,23 +70,12 @@ INSANE_SKIP:${PN} += "already-stripped" ALLOW_EMPTY:${PN} = "1" python do_fetch:prepend() { - repoList = [{ - "repo_name": "yocto-embedded-tools", - "git_url": "https://gitee.com/openeuler", - "branch": "master" - },{ - "repo_name": "dsoftbus_standard", - "git_url": "https://gitee.com/openeuler", - "branch": "dev" - },{ - "repo_name": "embedded-ipc", - "git_url": "https://gitee.com/openeuler", - "branch": "master" - },{ - "repo_name": "dsoftbus", - "git_url": "https://gitee.com/src-openeuler", - "branch": "master" - }] + repoList = [ + "yocto-embedded-tools", + "dsoftbus_standard", + "embedded-ipc", + "dsoftbus" + ] d.setVar("PKG_REPO_LIST", repoList) diff --git a/meta-openeuler/recipes-core/images/qemu-arm.inc b/meta-openeuler/recipes-core/images/qemu-arm.inc index 3046d4004a6467ab81f13e0545123bbbb0416e51..1171f181db8983439c2a63ad99c22584965bcfbe 100644 --- a/meta-openeuler/recipes-core/images/qemu-arm.inc +++ b/meta-openeuler/recipes-core/images/qemu-arm.inc @@ -1,2 +1,4 @@ # image configuration for arm require qemu.inc + +IMAGE_INSTALL:remove = "packagegroup-isulad" diff --git a/meta-openeuler/recipes-core/isulad/files/compile-error-fix.patch b/meta-openeuler/recipes-core/isulad/files/compile-error-fix.patch deleted file mode 100644 index 5c17ae9ab5cc60d43f166b92005e745a85fb1bb8..0000000000000000000000000000000000000000 --- a/meta-openeuler/recipes-core/isulad/files/compile-error-fix.patch +++ /dev/null @@ -1,347 +0,0 @@ -diff --git a/src/client/connect/protocol_type.c b/src/client/connect/protocol_type.c -index d77e088..79b699b 100644 ---- a/src/client/connect/protocol_type.c -+++ b/src/client/connect/protocol_type.c -@@ -72,7 +72,7 @@ int isula_filters_last_parse_args(size_t last_n, struct isula_filters **flt) - goto cleanup; - } - -- ret = snprintf(value, VALUE_SIZE, "%ld", last_n); -+ ret = snprintf(value, VALUE_SIZE, "%zu", last_n); - if (ret < 0 || ret >= VALUE_SIZE) { - ret = -1; - ERROR("Sprintf lastest n containers args failed"); -diff --git a/src/daemon/modules/service/service_network.c b/src/daemon/modules/service/service_network.c -index 2e7fa28..9bacdd8 100644 ---- a/src/daemon/modules/service/service_network.c -+++ b/src/daemon/modules/service/service_network.c -@@ -698,7 +698,7 @@ static int update_container_networks_info(const network_api_result_list *result, - } - - if (result->len != networks->len) { -- ERROR("result len %lu doesn't match networks len %lu", result->len, networks->len); -+ ERROR("result len %zu doesn't match networks len %zu", result->len, networks->len); - return -1; - } - -diff --git a/src/utils/cutils/utils_port.c b/src/utils/cutils/utils_port.c -index 583a350..236c433 100644 ---- a/src/utils/cutils/utils_port.c -+++ b/src/utils/cutils/utils_port.c -@@ -18,6 +18,9 @@ - #include - #include - #include -+#include -+ -+#define __STDC_FORMAT_MACROS - - #include - -@@ -192,7 +195,7 @@ char *util_pack_port_proto(uint64_t port, const char *proto) - return NULL; - } - -- ret = snprintf(port_proto, MAX_BUFFER_SIZE, "%lu/%s", port, proto); -+ ret = snprintf(port_proto, MAX_BUFFER_SIZE, "%" PRIu64 "/%s", port, proto); - if (ret < 0 || (size_t)ret >= MAX_BUFFER_SIZE) { - return NULL; - } -@@ -279,7 +282,7 @@ static int process_range_to_range(ports_t port_data, const char *raw_ip, struct - char format_host_port[MAX_BUFFER_SIZE] = { 0 }; - int nret = 0; - -- nret = snprintf(format_host_port, MAX_BUFFER_SIZE, "%lu", port_data.start_hport + i); -+ nret = snprintf(format_host_port, MAX_BUFFER_SIZE, "%" PRIu64, port_data.start_hport + i); - if (nret < 0 || (size_t)nret >= MAX_BUFFER_SIZE) { - ERROR("Format print host port err"); - ret = -1; -@@ -826,7 +829,7 @@ out: - static bool valid_port(uint64_t port) - { - if (port < 1 || port > 65535) { -- ERROR("Port numbers must be between 1 and 65535 (inclusive), got %lu", port); -+ ERROR("Port numbers must be between 1 and 65535 (inclusive), got %" PRIu64, port); - return false; - } - -@@ -926,9 +929,9 @@ bool util_new_network_port(const char *proto, const char *port, struct network_p - } - - if (work->start == work->end) { -- ret = sprintf(buff, "%zu/%s", work->start, proto) > 0; -+ ret = sprintf(buff, "%" PRIu64 "/%s", work->start, proto) > 0; - } else { -- ret = sprintf(buff, "%zu-%zu/%s", work->start, work->end, proto) > 0; -+ ret = sprintf(buff, "%" PRIu64 "-%" PRIu64 "/%s", work->start, work->end, proto) > 0; - } - if (!ret) { - ERROR("format port failed"); -diff --git a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/deviceset.c b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/deviceset.c -index 0259cf3..4423f7f 100644 ---- a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/deviceset.c -+++ b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/deviceset.c -@@ -432,7 +432,7 @@ static int pool_status(struct device_set *devset, uint64_t *total_size_in_sector - } - - *total_size_in_sectors = length; -- if (sscanf(params, "%lu %lu/%lu %lu/%lu", transaction_id, metadata_used, metadata_total, data_used, data_total) != -+ if (sscanf(params, "%" PRIu64 " %" PRIu64 "/%" PRIu64 "%" PRIu64 "/%" PRIu64, transaction_id, metadata_used, metadata_total, data_used, data_total) != - 5) { - ERROR("devmapper: sscanf device status params failed"); - ret = -1; -@@ -1067,7 +1067,7 @@ static int process_pending_transaction(struct device_set *devset) - // If open transaction ID is less than pool transaction ID, something - // is wrong. Bail out. - if (devset->transaction_id > devset->metadata_trans->open_transaction_id) { -- WARN("devmapper: Open Transaction id %ld is less than pool transaction id %ld", -+ WARN("devmapper: Open Transaction id %" PRIu64 " is less than pool transaction id %" PRIu64, - devset->metadata_trans->open_transaction_id, devset->transaction_id); - goto out; - } -@@ -1179,12 +1179,12 @@ static int pool_has_free_space(struct device_set *devset) - - data_free = data_total - data_used; - if (data_free < min_free_data) { -- ERROR("devmapper: Thin Pool has %lu free data blocks which is less than minimum required " -- "%lu free data blocks. Create more free space in thin pool or use dm.min_free_space option to change behavior", -+ ERROR("devmapper: Thin Pool has %" PRIu64 " free data blocks which is less than minimum required " -+ "%" PRIu64 " free data blocks. Create more free space in thin pool or use dm.min_free_space option to change behavior", - data_total - data_used, min_free_data); - isulad_set_error_message( -- "devmapper: Thin Pool has %lu free data blocks which is less than minimum required " -- "%lu free data blocks. Create more free space in thin pool or use dm.min_free_space option to change behavior", -+ "devmapper: Thin Pool has %" PRIu64 " free data blocks which is less than minimum required " -+ "%" PRIu64 " free data blocks. Create more free space in thin pool or use dm.min_free_space option to change behavior", - data_total - data_used, min_free_data); - ret = -1; - goto out; -@@ -1198,12 +1198,12 @@ static int pool_has_free_space(struct device_set *devset) - metadata_free = metadata_total - metadata_used; - if (metadata_free < min_free_metadata) { -- ERROR("devmapper: Thin Pool has %lu free metadata blocks " -- "which is less than minimum required %lu free metadata blocks. " -+ ERROR("devmapper: Thin Pool has %" PRIu64 " free metadata blocks " -+ "which is less than minimum required %" PRIu64 " free metadata blocks. " - "Create more free metadata space in thin pool or use dm.min_free_space option to change behavior", - metadata_total - metadata_used, min_free_metadata); - isulad_set_error_message( -- "devmapper: Thin Pool has %lu free metadata blocks " -- "which is less than minimum required %lu free metadata blocks. " -+ "devmapper: Thin Pool has %" PRIu64 " free metadata blocks " -+ "which is less than minimum required %" PRIu64 " free metadata blocks. " - "Create more free metadata space in thin pool or use dm.min_free_space option to change behavior", - metadata_total - metadata_used, min_free_metadata); - ret = -1; -@@ -2017,7 +2017,7 @@ static int check_thin_pool(struct device_set *devset) - goto out; - } - -- DEBUG("devmapper:total_size_in_sectors:%lu, data_total:%lu, metadata_used:%lu, metadata_total:%lu", -+ DEBUG("devmapper:total_size_in_sectors:%" PRIu64 ", data_total:%" PRIu64 ", metadata_used:%" PRIu64 ", metadata_total:%" PRIu64, - total_size_in_sectors, data_total, metadata_used, metadata_total); - - out: -@@ -2223,7 +2223,7 @@ static int check_grow_base_device_fs(struct device_set *devset, image_devmapper_ - - base_dev_size = get_base_device_size(devset); - if (devset->base_fs_size < base_dev_size) { -- ERROR("devmapper: Base fs size:%lu cannot be smaller than %lu", devset->base_fs_size, base_dev_size); -+ ERROR("devmapper: Base fs size:%" PRIu64 " cannot be smaller than %" PRIu64, devset->base_fs_size, base_dev_size); - return -1; - } - -@@ -2726,8 +2726,8 @@ static int determine_driver_capabilities(const char *version, struct device_set - } - - if (major < 4) { -- ERROR("devicamapper driver version:(%ld.xxx) < 4.27.0, do not surpport deferred removal", major); -- isulad_set_error_message("devicamapper driver version:(%ld.xxx) < 4.27.0, do not surpport deferred removal", -+ ERROR("devicamapper driver version:(%" PRId64 ".xxx) < 4.27.0, do not surpport deferred removal", major); -+ isulad_set_error_message("devicamapper driver version:(%" PRId64 ".xxx) < 4.27.0, do not surpport deferred removal", - major); - ret = -1; - goto out; -@@ -2749,8 +2749,8 @@ static int determine_driver_capabilities(const char *version, struct device_set - * check for patch level as it can not be less than 0. - */ - if (minor < 27) { -- ERROR("devicamapper driver version (4.%ld) < 4.27.0, , do not surpport deferred removal", minor); -- isulad_set_error_message("devicamapper driver version (4.%ld) < 4.27.0, , do not surpport deferred removal", -+ ERROR("devicamapper driver version (4.%" PRId64 ") < 4.27.0, , do not surpport deferred removal", minor); -+ isulad_set_error_message("devicamapper driver version (4.%" PRId64 ") < 4.27.0, , do not surpport deferred removal", - minor); - ret = -1; - goto out; -@@ -3003,8 +3003,8 @@ int add_device(const char *hash, const char *base_hash, struct device_set *devse - } - - if (size < base_device_info->info->size) { -- ERROR("devmapper: Container size:%lu cannot be smaller than %lu", size, base_device_info->info->size); -- isulad_set_error_message("Container size cannot be smaller than %lu", base_device_info->info->size); -+ ERROR("devmapper: Container size:%" PRIu64 "cannot be smaller than %" PRIu64, size, base_device_info->info->size); -+ isulad_set_error_message("Container size cannot be smaller than %" PRIu64, base_device_info->info->size); - ret = -1; - goto free_out; - } -diff --git a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/wrapper_devmapper.c b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/wrapper_devmapper.c -index fc22bcf..4e5ddab 100644 ---- a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/wrapper_devmapper.c -+++ b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/wrapper_devmapper.c -@@ -1157,7 +1157,7 @@ int dev_set_transaction_id(const char *pool_name, uint64_t old_id, uint64_t new_ - goto cleanup; - } - -- nret = snprintf(message, sizeof(message), "set_transaction_id %lu %lu", old_id, new_id); -+ nret = snprintf(message, sizeof(message), "set_transaction_id %" PRIu64 "%" PRIu64, old_id, new_id); - if (nret < 0 || (size_t)nret >= sizeof(message)) { - ERROR("devicemapper:print set_transaction_id message failed"); - ret = -1; -diff --git a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/quota/project_quota.c b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/quota/project_quota.c -index fa247b2..36b39c6 100644 ---- a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/quota/project_quota.c -+++ b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/quota/project_quota.c -@@ -149,7 +149,7 @@ static int ext4_set_quota(const char *target, struct pquota_control *ctrl, uint6 - } - ctrl->next_project_id++; - -- EVENT("Set directory %s project ID:%u quota size: %lu", target, project_id, size); -+ EVENT("Set directory %s project ID:%u quota size: %" PRIu64, target, project_id, size); - - if (ext4_set_project_quota(ctrl->backing_fs_device, project_id, size) != 0) { - ERROR("Failed to set project id %d to %s.", project_id, target); -@@ -204,7 +204,7 @@ static int xfs_set_quota(const char *target, struct pquota_control *ctrl, uint64 - } - ctrl->next_project_id++; - -- EVENT("Set directory %s project ID:%u quota size: %lu", target, project_id, size); -+ EVENT("Set directory %s project ID:%u quota size: %" PRIu64, target, project_id, size); - - if (xfs_set_project_quota(ctrl->backing_fs_device, project_id, size) != 0) { - ERROR("Failed to set project id %d to %s.", project_id, target); -diff --git a/src/daemon/modules/image/oci/storage/layer_store/layer_store.c b/src/daemon/modules/image/oci/storage/layer_store/layer_store.c -index 4edd0ca..f6de549 100644 ---- a/src/daemon/modules/image/oci/storage/layer_store/layer_store.c -+++ b/src/daemon/modules/image/oci/storage/layer_store/layer_store.c -@@ -1088,7 +1088,7 @@ static int apply_diff(layer_t *l, const struct io_read_wrapper *diff) - // uncompress digest get from up caller - ret = make_tar_split_file(l->slayer->id, diff, &size); - -- INFO("Apply layer get size: %ld", size); -+ INFO("Apply layer get size: %" PRId64, size); - l->slayer->diff_size = size; - - out: -diff --git a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/overlay2/driver_overlay2.c b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/overlay2/driver_overlay2.c -index eedbeef..0158fff 100644 ---- a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/overlay2/driver_overlay2.c -+++ b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/overlay2/driver_overlay2.c -@@ -845,8 +845,8 @@ static int set_layer_quota(const char *dir, const json_map_string_string *opts, - } - - if (quota > 0 && quota < 4096) { -- ERROR("Illegal storage quota size %lu, 4096 at least", quota); -- isulad_set_error_message("Illegal storage quota size %lu, 4096 at least", quota); -+ ERROR("Illegal storage quota size %" PRIu64 ", 4096 at least", quota); -+ isulad_set_error_message("Illegal storage quota size %" PRIu64 ", 4096 at least", quota); - ret = -1; - goto out; - } -diff --git a/src/daemon/modules/image/oci/storage/image_store/image_store.c b/src/daemon/modules/image/oci/storage/image_store/image_store.c -index 84187de..99fd1ae 100644 ---- a/src/daemon/modules/image/oci/storage/image_store/image_store.c -+++ b/src/daemon/modules/image/oci/storage/image_store/image_store.c -@@ -3170,13 +3170,13 @@ static int get_layers_from_manifest(const registry_manifest_schema1 *manifest, l - size_t j = 0; - - if (manifest->fs_layers_len > MAX_LAYER_NUM || manifest->fs_layers_len == 0) { -- ERROR("Invalid layer number %ld, maxium is %d and it can't be 0", manifest->fs_layers_len, MAX_LAYER_NUM); -+ ERROR("Invalid layer number %zu, maxium is %d and it can't be 0", manifest->fs_layers_len, MAX_LAYER_NUM); - ret = -1; - goto out; - } - - if (manifest->fs_layers_len != manifest->history_len) { -- ERROR("Invalid layer number %ld do not match history number %ld", manifest->fs_layers_len, -+ ERROR("Invalid layer number %zu do not match history number %zu", manifest->fs_layers_len, - manifest->history_len); - ret = -1; - goto out; -diff --git a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/driver_devmapper.c b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/driver_devmapper.c -index 900c940..c57c1df 100644 ---- a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/driver_devmapper.c -+++ b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/devmapper/driver_devmapper.c -@@ -18,6 +18,9 @@ - #include - #include - #include -+#include -+ -+#define __STDC_FORMAT_MACROS - - #include "isula_libutils/log.h" - #include "utils.h" -@@ -506,7 +509,7 @@ static void status_append(const char *name, const char *value, uint64_t u_data, - free(human_size); - } else { - // If unsigned long int is bigger than LONG_MAX, just print directly with Byte unit -- nret = snprintf(tmp, MAX_INFO_LENGTH, "%s: %luB\n", name, u_data); -+ nret = snprintf(tmp, MAX_INFO_LENGTH, "%s: %" PRIu64 "B\n", name, u_data); - } - break; - case INT: -@@ -514,7 +517,7 @@ static void status_append(const char *name, const char *value, uint64_t u_data, - break; - case UINT64_NONE: - // Print without unit -- nret = snprintf(tmp, MAX_INFO_LENGTH, "%s: %lu\n", name, u_data); -+ nret = snprintf(tmp, MAX_INFO_LENGTH, "%s: %" PRIu64 "\n", name, u_data); - default: - break; - } -diff --git a/src/daemon/modules/image/oci/storage/storage.c b/src/daemon/modules/image/oci/storage/storage.c -index 81382bf..ec58c41 100644 ---- a/src/daemon/modules/image/oci/storage/storage.c -+++ b/src/daemon/modules/image/oci/storage/storage.c -@@ -24,6 +24,9 @@ - #include - #include - #include -+#include -+ -+#define __STDC_FORMAT_MACROS - - #include "io_wrapper.h" - #include "utils.h" -@@ -919,7 +922,7 @@ int storage_img_set_image_size(const char *image_id) - } - - if (image_store_set_image_size(image_id, (uint64_t)image_size) != 0) { -- ERROR("Failed to set image %s size %lu", image_id, (uint64_t)image_size); -+ ERROR("Failed to set image %s size %" PRIu64, image_id, (uint64_t)image_size); - ret = -1; - goto out; - } - ---- a/src/daemon/entry/cri/cri_helpers.cc 2023-08-30 06:37:16.794951394 +0000 -+++ b/src/daemon/entry/cri/cri_helpers.cc 2023-08-30 06:39:13.288001023 +0000 -@@ -34,6 +34,10 @@ - #include "isulad_config.h" - #include "sha256.h" - -+#include -+ -+#define __STDC_FORMAT_MACROS -+ - namespace CRIHelpers { - const std::string Constants::POD_NETWORK_ANNOTATION_KEY { "network.alpha.kubernetes.io/network" }; - const std::string Constants::CONTAINER_TYPE_LABEL_KEY { "cri.isulad.type" }; -@@ -1342,7 +1346,7 @@ int64_t ParseQuantity(const std::string - if (error.NotEmpty()) { - return -1; - } -- DEBUG("parse quantity: %s to %ld", str.c_str(), result); -+ DEBUG("parse quantity: %s to %" PRId64, str.c_str(), result); - return result; - } - diff --git a/meta-openeuler/recipes-core/isulad/isulad_2.1.1.bb b/meta-openeuler/recipes-core/isulad/isulad_2.1.3.bb similarity index 52% rename from meta-openeuler/recipes-core/isulad/isulad_2.1.1.bb rename to meta-openeuler/recipes-core/isulad/isulad_2.1.3.bb index 08700a9d7d5889d94665a7b19e469b53c4d2699b..00df1f0a3ad309d347b3a0b0773633ea6cf5f94c 100644 --- a/meta-openeuler/recipes-core/isulad/isulad_2.1.1.bb +++ b/meta-openeuler/recipes-core/isulad/isulad_2.1.3.bb @@ -9,54 +9,44 @@ LIC_FILES_CHKSUM = "file://LICENSES/LICENSE;md5=1acb172ffd3d252285dd1b8b8459941e OPENEULER_REPO_NAME = "iSulad" -SRC_URI = "file://v${PV}.tar.gz \ - file://0001-modify-dependence-from-lcr-to-libisula.patch \ - file://0002-Add-unified-memory_swap_limit_in_bytes-fields-into-C.patch \ - file://0003-Add-macro-for-protoc-cmake.patch \ - file://0004-fix-design-typo.patch \ - file://0005-fix-cpu-rt-review-comments.patch \ - file://0006-fix-inspect.sh-failed.patch \ - file://0007-add-CRI-ContainerStats-Service.patch \ - file://0008-fix-isula-cpu-rt-CI.patch \ - file://0009-fix-cpu-rt-CI.patch \ - file://0010-fix-cpu-rt-CI.patch \ - file://0011-Bugfix-in-config-and-executor.patch \ - file://0012-fix-cpu-rt-disable-after-reboot-machine.patch \ - file://0013-fix-selinux_label_ut-timeout-and-add-timeout-for-all.patch \ - file://0014-add-retry-for-read-write.patch \ - file://0015-support-pull-image-with-digest.patch \ - file://0016-isulad-shim-support-execSync-with-timeout.patch \ - file://0017-Refine-the-commit-info.patch \ - file://0018-Refine-typo-of-word-container.patch \ - file://0019-cleancode-for-read-write.patch \ - file://0020-add-crictl-timeout-and-sync-for-CI.patch \ - file://0021-unlock-m_podsLock-if-new-failed.patch \ - file://0022-Update-CRI.patch \ - file://0023-add-cgroup-cpu-ut.patch \ - file://0024-remove-temp-variables.patch \ - file://0025-fix-read-member-error-from-struct.patch \ - file://0026-Fix-PR-runc.patch \ - file://0027-allow-the-paused-container-to-be-stopped.patch \ - file://0028-Refine.patch \ - file://0029-support-isula-update-when-runtime-is-runc.patch \ - file://0030-Refine-as-others-feedback.patch \ - file://0031-fix-CRI-SetupPod-and-TearDownPod-deadlock.patch \ - file://0032-remote-layer-store-demo.patch \ - file://0033-add-ci-for-remote-ro.patch \ - file://0034-change-sleep-to-usleep-to-avoid-lossing-of-accuracy.patch \ - file://0035-fix-compile-error-when-not-enable-remote-ro.patch \ - file://0036-adapt-to-repo-of-openeuler-url-changed.patch \ - file://0037-change-goto-branch.patch \ - file://0038-CI-not-enable-remote-ro-for-ut.patch \ - file://0039-use-auto-free-to-proc_t.patch \ - file://0040-modifying-cpurt-file-permissions.patch \ - file://0041-use-CURLOPT_XFERINFOFUNCTION-instead-of-deprecated-C.patch \ - file://0042-bugfix-remote-ro-try-add-or-remove-image-layer-twice.patch \ - file://0043-bugfix-can-t-delete-layers-under-dir-overlay-layers.patch \ +SRC_URI = " \ + file://v${PV}.tar.gz \ + file://0001-2155-Use-reference-in-loop-in-listpodsandbox.patch \ + file://0002-2156-Fix-sandbox-error-logging.patch \ + file://0003-2158-Use-crictl-v1.22.0-for-ci.patch \ + file://0004-2162-Fix-rename-issue-for-id-manager.patch \ + file://0005-2163-add-bind-mount-file-lock.patch \ + file://0006-2168-fix-code-bug.patch \ + file://0007-2171-Fix-nullptr-in-src-daemon-entry.patch \ + file://0008-Add-vsock-support-for-exec.patch \ + file://0009-remove-unneccessary-strerror.patch \ + file://0010-do-not-report-low-level-error-to-user.patch \ + file://0011-remove-usage-of-strerror-with-user-defined-errno.patch \ + file://0012-use-gmtime_r-to-replace-gmtime.patch \ + file://0013-improve-report-error-message-of-client.patch \ + file://0014-adapt-new-error-message-for-isula-cp.patch \ + file://0015-2182-Add-mutex-for-container-list-in-sandbox.patch \ + file://0016-2180-fix-execlp-not-enough-args.patch \ + file://0017-2135-modify-incorrect-variable-type.patch \ + file://0018-make-sure-the-input-parameter-is-not-empty-and-optim.patch \ + file://0019-remove-password-in-url-module-and-clean-sensitive-in.patch \ + file://0020-2153-fix-codecheck.patch \ + file://0021-2157-bugfix-for-memset.patch \ + file://0022-2159-use-macros-to-isolate-the-password-option-of-lo.patch \ + file://0023-2161-bugfix-for-api-cmakelist.patch \ + file://0024-2165-preventing-the-use-of-insecure-isulad-tmpdir-di.patch \ + file://0025-2166-move-ensure_isulad_tmpdir_security-function-to-.patch \ + file://0026-2169-using-macros-to-isolate-isulad-s-enable_plugin-.patch \ + file://0027-2178-clean-path-for-fpath-and-verify-chain-id.patch \ + file://0028-2179-modify-the-permissions-of-tmpdir-and-file-lock-.patch \ + file://0029-image-ensure-id-of-loaded-and-pulled-image-is-valid.patch \ + file://0030-mask-proxy-informations.patch \ + file://0031-add-testcase-for-isula-info.patch \ + file://0032-fix-oci-import-compile-error.patch \ + file://0033-2188-Support-both-C-11-and-C-17.patch \ + file://0034-add-config-for-enable-cri-v1.patch \ " -SRC_URI:append = "file://compile-error-fix.patch" - S = "${WORKDIR}/iSulad-v${PV}" inherit cmake diff --git a/meta-openeuler/recipes-core/isulad/lib-shim-v2-bin_0.0.1.bb b/meta-openeuler/recipes-core/isulad/lib-shim-v2-bin_0.0.1.bb index 045c1fd22bf9b0091d88c7035b4e5496dda014c3..d830bfb33dfdaa3208561d607e83fa0701007970 100644 --- a/meta-openeuler/recipes-core/isulad/lib-shim-v2-bin_0.0.1.bb +++ b/meta-openeuler/recipes-core/isulad/lib-shim-v2-bin_0.0.1.bb @@ -14,9 +14,9 @@ SRC_URI[x86.md5sum] = "fb1cdaba15faae97c94f9595b09ff945" SRC_URI[header.md5sum] = "97c8e9fff736e0f96c36dac0e5426aa2" SRC_URI = " \ - http://repo.openeuler.org/openEuler-22.03-LTS-SP2/OS/aarch64/Packages/lib-shim-v2-0.0.1-6.oe2203sp2.aarch64.rpm;name=arm64 \ - http://repo.openeuler.org/openEuler-22.03-LTS-SP2/OS/x86_64/Packages/lib-shim-v2-0.0.1-6.oe2203sp2.x86_64.rpm;name=x86 \ - http://repo.openeuler.org/openEuler-22.03-LTS-SP2/everything/aarch64/Packages/lib-shim-v2-devel-0.0.1-6.oe2203sp2.aarch64.rpm;name=header \ + http://repo.openeuler.openatom.cn/openEuler-22.03-LTS-SP2/OS/aarch64/Packages/lib-shim-v2-0.0.1-6.oe2203sp2.aarch64.rpm;name=arm64 \ + http://repo.openeuler.openatom.cn/openEuler-22.03-LTS-SP2/OS/x86_64/Packages/lib-shim-v2-0.0.1-6.oe2203sp2.x86_64.rpm;name=x86 \ + http://repo.openeuler.openatom.cn/openEuler-22.03-LTS-SP2/everything/aarch64/Packages/lib-shim-v2-devel-0.0.1-6.oe2203sp2.aarch64.rpm;name=header \ " S = "${WORKDIR}/repack" @@ -54,4 +54,3 @@ FILES:${PN}-dev = " \ " INSANE_SKIP:${PN} += "already-stripped" - diff --git a/meta-openeuler/recipes-core/lcr/lcr_2.1.1.bb b/meta-openeuler/recipes-core/lcr/lcr_2.1.2.bb similarity index 72% rename from meta-openeuler/recipes-core/lcr/lcr_2.1.1.bb rename to meta-openeuler/recipes-core/lcr/lcr_2.1.2.bb index cce4b5c82f473b53745d6da8eb88973746d710dd..1f631ed040b2a9800212a6192876533e9dc19424 100644 --- a/meta-openeuler/recipes-core/lcr/lcr_2.1.1.bb +++ b/meta-openeuler/recipes-core/lcr/lcr_2.1.2.bb @@ -14,15 +14,16 @@ LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0-only;m inherit cmake ### Build metadata -SRC_URI = "file://v${PV}.tar.gz \ - file://0001-add-libisula.pc.patch \ - file://0002-add-unified-and-memory_swap_limit_in_bytes-into-host.patch \ - file://0003-fix-update-cpu-rt-period-failed.patch \ - file://0004-fix-writing-config-line-with-wrong-length.patch \ - file://0005-Add-memory-related-fields.patch \ - file://0006-mod-headers.patch \ - file://0007-add-cgroup-resources-json-schema-for-isula-update.patch \ - file://0008-add-field-for-isulad-daemon-configs.patch \ +SRC_URI = " \ + file://v${PV}.tar.gz \ + file://0001-support-check-symbols-and-compile-code-in-cmake.patch \ + file://0002-remove-unnecessary-strerror.patch \ + file://0003-improve-code-of-function-in-log.patch \ + file://0004-support-visibility-of-compiler.patch \ + file://0005-refactor-util-buffer-and-add-ut.patch \ + file://0006-264-Support-both-C-11-and-C-17.patch \ + file://0007-262-Fix-empty-pointer-and-overflow.patch \ + file://0008-266-set-env-to-avoid-invoke-lxc-binary-directly.patch \ " S = "${WORKDIR}/${BPN}-v${PV}" diff --git a/meta-openeuler/recipes-core/lxc/files/dnsmasq.conf b/meta-openeuler/recipes-core/lxc/files/dnsmasq.conf new file mode 100644 index 0000000000000000000000000000000000000000..124f7ebea4cbd28a9ee34a7ebf7b9b0f8c25b5dc --- /dev/null +++ b/meta-openeuler/recipes-core/lxc/files/dnsmasq.conf @@ -0,0 +1,2 @@ +bind-interfaces +except-interface=lxcbr0 diff --git a/meta-openeuler/recipes-core/lxc/files/lxc-net b/meta-openeuler/recipes-core/lxc/files/lxc-net new file mode 100644 index 0000000000000000000000000000000000000000..1c59b705b0bb6bdd051fbd5e46c061563253ed83 --- /dev/null +++ b/meta-openeuler/recipes-core/lxc/files/lxc-net @@ -0,0 +1,9 @@ +USE_LXC_BRIDGE="true" +LXC_BRIDGE="lxcbr0" +LXC_ADDR="10.0.3.1" +LXC_NETMASK="255.255.255.0" +LXC_NETWORK="10.0.3.0/24" +LXC_DHCP_RANGE="10.0.3.2,10.0.3.254" +LXC_DHCP_MAX="253" +LXC_DHCP_CONFILE="" +LXC_DOMAIN="" diff --git a/meta-openeuler/recipes-core/lxc/lxc/0027-fix-redeclaration.patch b/meta-openeuler/recipes-core/lxc/lxc/0027-fix-redeclaration.patch deleted file mode 100644 index 94032ea4f6c46213f96b1bbaacbe575763a6143e..0000000000000000000000000000000000000000 --- a/meta-openeuler/recipes-core/lxc/lxc/0027-fix-redeclaration.patch +++ /dev/null @@ -1,87 +0,0 @@ ---- a/src/lxc/macro.h -+++ b/src/lxc/macro.h -@@ -10,6 +10,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -492,2 +493,14 @@ static inline bool is_set(__u32 bit, __u - -+#ifndef FS_IOC_GETFLAGS -+#define FS_IOC_GETFLAGS _IOR('f', 1, long) -+#endif -+ -+#ifndef FS_IOC_SETFLAGS -+#define FS_IOC_SETFLAGS _IOW('f', 2, long) -+#endif -+ -+#ifndef FS_IMMUTABLE_FL -+#define FS_IMMUTABLE_FL 0x00000010 /* Immutable file */ -+#endif -+ - #endif /* __LXC_MACRO_H */ ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -19,8 +19,6 @@ - #include - #include - #include --/* Needs to be after sys/mount.h header */ --#include - #include - #include - #include -@@ -257,7 +255,7 @@ int mkdir_p(const char *dir, mode_t mode) - return 0; - } - --char *get_rundir() -+char *get_rundir(void) - { - char *rundir; - size_t len; ---- a/src/lxc/conf.c -+++ b/src/lxc/conf.c -@@ -3657,7 +3657,9 @@ static bool verify_start_hooks(struct lxc_conf *conf) - - static bool execveat_supported(void) - { -- execveat(-1, "", NULL, NULL, AT_EMPTY_PATH); -+ char *argv[1] = {NULL}; -+ char *envp[1] = {NULL}; -+ execveat(-1, "", argv, envp, AT_EMPTY_PATH); - if (errno == ENOSYS) - return false; - ---- a/src/lxc/json/json_common.c -+++ b/src/lxc/json/json_common.c -@@ -765,7 +765,11 @@ int append_json_map_int_string(json_map_int_string *map, int key, const char *va - return -1; - } - -- if ((SIZE_MAX / sizeof(int) - 1) < map->len || (SIZE_MAX / sizeof(char *) - 1) < map->len) { -+ if ((SIZE_MAX / sizeof(int) - 1) < map->len) { -+ return -1; -+ } -+ -+ if ((SIZE_MAX / sizeof(char *) - 1) < map->len) { - return -1; - } - -@@ -887,7 +891,11 @@ int append_json_map_string_int(json_map_string_int *map, const char *key, int va - return -1; - } - -- if ((SIZE_MAX / sizeof(char *) - 1) < map->len || (SIZE_MAX / sizeof(int) - 1) < map->len) { -+ if ((SIZE_MAX / sizeof(char *) - 1) < map->len) { -+ return -1; -+ } -+ -+ if ((SIZE_MAX / sizeof(int) - 1) < map->len) { - return -1; - } - - diff --git a/meta-openeuler/recipes-core/lxc/lxc/0036-add-riscv-support.patch b/meta-openeuler/recipes-core/lxc/lxc/0036-add-riscv-support.patch deleted file mode 100644 index fcd5f2485733475a66d84cd3972f4e9ebd5cd835..0000000000000000000000000000000000000000 --- a/meta-openeuler/recipes-core/lxc/lxc/0036-add-riscv-support.patch +++ /dev/null @@ -1,119 +0,0 @@ ---- lxc-4.0.3/src/lxc/syscall_numbers.h -+++ lxc-4.0.3-new/src/lxc/syscall_numbers.h -@@ -35,6 +35,8 @@ - #define __NR_keyctl 280 - #elif defined __powerpc__ - #define __NR_keyctl 271 -+ #elif defined __riscv -+ #define __NR_keyctl 219 - #elif defined __sparc__ - #define __NR_keyctl 283 - #elif defined __ia64__ -@@ -68,6 +70,8 @@ - #define __NR_memfd_create 350 - #elif defined __powerpc__ - #define __NR_memfd_create 360 -+ #elif defined __riscv -+ #define __NR_memfd_create 279 - #elif defined __sparc__ - #define __NR_memfd_create 348 - #elif defined __blackfin__ -@@ -103,6 +107,8 @@ - #define __NR_pivot_root 217 - #elif defined __powerpc__ - #define __NR_pivot_root 203 -+ #elif defined __riscv -+ #define __NR_pivot_root 41 - #elif defined __sparc__ - #define __NR_pivot_root 146 - #elif defined __ia64__ -@@ -136,6 +142,8 @@ - #define __NR_setns 339 - #elif defined __powerpc__ - #define __NR_setns 350 -+ #elif defined __riscv -+ #define __NR_setns 268 - #elif defined __sparc__ - #define __NR_setns 337 - #elif defined __ia64__ -@@ -169,6 +177,8 @@ - #define __NR_sethostname 74 - #elif defined __powerpc__ - #define __NR_sethostname 74 -+ #elif defined __riscv -+ #define __NR_sethostname 161 - #elif defined __sparc__ - #define __NR_sethostname 88 - #elif defined __ia64__ -@@ -202,6 +212,8 @@ - #define __NR_signalfd 316 - #elif defined __powerpc__ - #define __NR_signalfd 305 -+ #elif defined __riscv -+ #define __NR_signalfd4 74 - #elif defined __sparc__ - #define __NR_signalfd 311 - #elif defined __ia64__ -@@ -235,6 +247,8 @@ - #define __NR_signalfd4 322 - #elif defined __powerpc__ - #define __NR_signalfd4 313 -+ #elif defined __riscv -+ #define __NR_signalfd4 74 - #elif defined __sparc__ - #define __NR_signalfd4 317 - #elif defined __ia64__ -@@ -268,6 +282,8 @@ - #define __NR_unshare 303 - #elif defined __powerpc__ - #define __NR_unshare 282 -+ #elif defined __riscv -+ #define __NR_unshare 97 - #elif defined __sparc__ - #define __NR_unshare 299 - #elif defined __ia64__ -@@ -301,6 +317,8 @@ - #define __NR_bpf 351 - #elif defined __powerpc__ - #define __NR_bpf 361 -+ #elif defined __riscv -+ #define __NR_bpf 280 - #elif defined __sparc__ - #define __NR_bpf 349 - #elif defined __ia64__ -@@ -334,6 +352,8 @@ - #define __NR_faccessat 300 - #elif defined __powerpc__ - #define __NR_faccessat 298 -+ #elif defined __riscv -+ #define __NR_faccessat 48 - #elif defined __sparc__ - #define __NR_faccessat 296 - #elif defined __ia64__ -@@ -385,6 +405,8 @@ - #define __NR_seccomp 348 - #elif defined __powerpc__ - #define __NR_seccomp 358 -+ #elif defined __riscv -+ #define __NR_seccomp 277 - #elif defined __sparc__ - #define __NR_seccomp 346 - #elif defined __ia64__ -@@ -418,6 +440,8 @@ - #define __NR_gettid 236 - #elif defined __powerpc__ - #define __NR_gettid 207 -+ #elif defined __riscv -+ #define __NR_gettid 178 - #elif defined __sparc__ - #define __NR_gettid 143 - #elif defined __ia64__ -@@ -455,6 +479,8 @@ - #define __NR_execveat 354 - #elif defined __powerpc__ - #define __NR_execveat 362 -+ #elif defined __riscv -+ #define __NR_execveat 281 - #elif defined __sparc__ - #define __NR_execveat 350 - #elif defined __ia64__ diff --git a/meta-openeuler/recipes-core/lxc/lxc/check_only_rootfs_as_filesystem_type.patch b/meta-openeuler/recipes-core/lxc/lxc/check_only_rootfs_as_filesystem_type.patch deleted file mode 100644 index c37318d330883edd0f7ebb75c036d342fd5f2b6e..0000000000000000000000000000000000000000 --- a/meta-openeuler/recipes-core/lxc/lxc/check_only_rootfs_as_filesystem_type.patch +++ /dev/null @@ -1,21 +0,0 @@ -commit 4f16f60b4ad67a11da4cf7a38391a28724e49f18 -Author: lisimin -Date: Thu Sep 23 11:10:59 2021 +0800 - - check only rootfs as filesytem type - - Signed-off-by: lisimin - -diff --git a/src/lxc/utils.c b/src/lxc/utils.c -index 95c00cf..46e9d35 100644 ---- a/src/lxc/utils.c -+++ b/src/lxc/utils.c -@@ -730,7 +730,7 @@ bool detect_ramfs_rootfs(void) - if (strcmp(p + 1, "/") == 0) { - /* This is '/'. Is it the ramfs? */ - p = strchr(p2 + 1, '-'); -- if (p && strncmp(p, "- rootfs rootfs ", 16) == 0) -+ if (p && strncmp(p, "- rootfs ", 9) == 0) - return true; - } - } diff --git a/meta-openeuler/recipes-core/lxc/lxc/support_arm32.patch b/meta-openeuler/recipes-core/lxc/lxc/support_arm32.patch deleted file mode 100644 index c7ba808ef7f3b32f71527a4d9fcee1663224683e..0000000000000000000000000000000000000000 --- a/meta-openeuler/recipes-core/lxc/lxc/support_arm32.patch +++ /dev/null @@ -1,52 +0,0 @@ -commit 05f1ae3dac69f1c677d3d8d0fabfb1536b8c2583 -Author: lisimin -Date: Wed Sep 22 09:34:22 2021 +0800 - - support arm32 - - Signed-off-by: lisimin - -diff --git a/configure.ac b/configure.ac -index 9eb6dcb..929d670 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -812,6 +812,7 @@ AM_CONDITIONAL([HAVE_ISULAD], [test "x$adapt_isulad" = "xyes"]) - if test "x$adapt_isulad" = "xyes"; then - AC_DEFINE([HAVE_ISULAD], 1, [adapt to iSulad]) - AC_MSG_RESULT([yes]) -+ AC_SUBST([YAJL_LIBS], [-lyajl]) - else - AC_MSG_RESULT([no]) - fi -diff --git a/src/lxc/json/json_common.c b/src/lxc/json/json_common.c -index ec20c59..87895b0 100755 ---- a/src/lxc/json/json_common.c -+++ b/src/lxc/json/json_common.c -@@ -764,11 +764,11 @@ int append:json_map_int_string(json_map_int_string *map, int key, const char *va - if (map == NULL) { - return -1; - } -- -+#if 0 - if ((SIZE_MAX / sizeof(int) - 1) < map->len || (SIZE_MAX / sizeof(char *) - 1) < map->len) { - return -1; - } -- -+#endif - len = map->len + 1; - keys = safe_malloc(len * sizeof(int)); - vals = safe_malloc(len * sizeof(char *)); -@@ -886,11 +886,11 @@ int append:json_map_string_int(json_map_string_int *map, const char *key, int va - if (map == NULL) { - return -1; - } -- -+#if 0 - if ((SIZE_MAX / sizeof(char *) - 1) < map->len || (SIZE_MAX / sizeof(int) - 1) < map->len) { - return -1; - } -- -+#endif - len = map->len + 1; - keys = safe_malloc(len * sizeof(char *)); - vals = safe_malloc(len * sizeof(int)); diff --git a/meta-openeuler/recipes-core/lxc/lxc_%.bbappend b/meta-openeuler/recipes-core/lxc/lxc_%.bbappend new file mode 100644 index 0000000000000000000000000000000000000000..3185c208f0ed1fc96c182d3422b4ee4eeb332e70 --- /dev/null +++ b/meta-openeuler/recipes-core/lxc/lxc_%.bbappend @@ -0,0 +1,46 @@ +PV = "5.0.2" + +SRC_URI = " \ + file://${BP}.tar.gz \ + file://0001-iSulad-add-json-files-and-adapt-to-meson.patch \ + file://0002-iSulad-adapt-security-conf-attach-cgroup-and-start.patch \ + file://0003-iSulad-adapt-conf-network-storage-and-termianl.patch \ + file://0004-iSulad-adapt-confile-lxccontainer-and-start.patch \ + file://0005-fix-compile-error.patch \ + file://0006-remove-isulad_cgfsng.patch \ + file://0007-fix-run-container-failed-when-enable-isulad.patch \ +" + +# FROM meta-virtualization +SRC_URI:append = " \ + file://lxc-net \ + file://dnsmasq.conf \ +" + +S = "${WORKDIR}/${BPN}-${PV}" + +# Remove some operational dependencies as we do not yet support full functionality. +RDEPENDS:${PN}:remove = " \ + bridge-utils \ + dnsmasq \ + perl-module-strict \ + perl-module-getopt-long \ + perl-module-vars \ + perl-module-exporter \ + perl-module-constant \ + perl-module-overload \ + perl-module-exporter-heavy \ + libidn \ +" + +# According to the lxc.spec of src-openEuler, add DEPENDS +DEPENDS += " \ + yajl libseccomp libcap \ + libselinux \ + ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', '', d)} \ +" + +EXTRA_OEMESON += "-Disulad=true" + +# add "-L{sysroot}/lib64" to search libcap +TARGET_LDFLAGS += "-L${STAGING_BASELIBDIR}" diff --git a/meta-openeuler/recipes-core/lxc/lxc_4.0.3.bb b/meta-openeuler/recipes-core/lxc/lxc_4.0.3.bb deleted file mode 100644 index 2f2e4e68e816f866706d586ae3326d7a5fba3068..0000000000000000000000000000000000000000 --- a/meta-openeuler/recipes-core/lxc/lxc_4.0.3.bb +++ /dev/null @@ -1,67 +0,0 @@ -SUMMARY = "lxc aims to use these new functionnalities to provide an userspace container object" -DESCRIPTION = "lxc is a well-known Linux container runtime that consists of tools, templates, \ - and library and language bindings. It's pretty low level, very flexible and covers \ - just about every containment feature supported by the upstream kernel" -SECTION = "console/utils" -LICENSE = "LGPL-2.1-only & GPL-2.0-only" - -LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0-only;md5=801f80980d171dd6425610833a22dbe6" - -SRC_URI = "file://${BP}.tar.gz \ - file://0001-refactor-patch-code-of-utils-commands-and-so-on.patch \ - file://0002-refactor-patch-code-of-isulad-for-conf-exec-attach.patch \ - file://0003-refactor-patch-code-of-isulad-for-selinux-attach.patch \ - file://0004-refactor-patch-code-of-lxccontianer-and-so-on.patch \ - file://0005-refactor-patch-code-of-attach-and-seccomp.patch \ - file://0006-refactor-patch-about-namespace-log-terminal.patch \ - file://0007-refactor-patches-on-terminal.c-start.c-and-so-on.patch \ - file://0008-refactor-patch-code-of-json.patch \ - file://0009-fix-HOME-env-of-container-unset-error.patch \ - file://0010-check-yajl-only-when-have-isulad.patch \ - file://0011-drop-security_context_t.patch \ - file://0012-only-set-user-or-image-set-non-empty-HOME.patch \ - file://0013-return-fail-if-no-args-or-no-rootfs-path-found.patch \ - file://0014-fix-tools-using-option-give-error-message.patch \ - file://0015-fix-do-mask-pathes-after-parent-mounted.patch \ - file://0016-skip-kill-cgroup-processes-if-no-hierarchies.patch \ - file://0017-lxc-Add-sw64-architecture.patch \ - file://0018-add-macro-to-adapt-musl-libc.patch \ - file://0019-add-lxc-attach-add-gids-option.patch \ - file://0020-add-sscanf-adapation-code-for-musl.patch \ - file://0021-change-the-suffi-parameter-in-lxc-attach-help-output.patch \ - file://0022-fix-cve-CVE-2022-47952-log-leaks-root-information.patch \ - file://0023-fix-lxc-write-error-message.patch \ - file://0024-remove-process-inheritable-capability.patch \ - file://0025-fix-ops-hierarchies-cause-coredump.patch \ - file://0026-meminfo-cri-1.25.patch \ -" - -SRC_URI:append = " \ - file://check_only_rootfs_as_filesystem_type.patch \ - file://0027-fix-redeclaration.patch \ -" - -DEPENDS = " \ - yajl libseccomp libcap \ - libselinux \ - ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', '', d)} \ -" - -EXTRA_OECONF = " \ - --disable-static --with-rootfs-path=/var/lib/lxc/rootfs --with-distro=openeuler \ - ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '--with-init-script=systemd', '', d)} \ - --enable-seccomp \ - --enable-selinux \ - --enable-isulad \ -" - -FILES:${PN} += " \ - /usr/share \ - /lib/systemd/system \ -" - -inherit autotools - -BBCLASSEXTEND = "native nativesdk" - -CFLAGS:append = "-Wno-error=stringop-overflow -Wno-error=strict-prototypes -Wno-error=old-style-definition" diff --git a/meta-openeuler/recipes-core/lxc/lxc_git.bb b/meta-openeuler/recipes-core/lxc/lxc_git.bb new file mode 100644 index 0000000000000000000000000000000000000000..d07d776a7d729a954b0ea1942399638b2a1c92af --- /dev/null +++ b/meta-openeuler/recipes-core/lxc/lxc_git.bb @@ -0,0 +1,210 @@ +DESCRIPTION = "lxc aims to use these new functionnalities to provide an userspace container object" +SECTION = "console/utils" +LICENSE = "LGPL-2.1-only & GPL-2.0-only" +LIC_FILES_CHKSUM = "file://LICENSE.LGPL2.1;md5=4fbd65380cdd255951079008b364516c \ + file://LICENSE.GPL2;md5=751419260aa954499f7abaabaa882bbe \ +" + +DEPENDS = "libxml2 libcap" +RDEPENDS:${PN} = " \ + rsync \ + curl \ + gzip \ + xz \ + tar \ + libcap-bin \ + bridge-utils \ + dnsmasq \ + perl-module-strict \ + perl-module-getopt-long \ + perl-module-vars \ + perl-module-exporter \ + perl-module-constant \ + perl-module-overload \ + perl-module-exporter-heavy \ + gmp \ + libidn \ + gnutls \ + nettle \ + util-linux-mountpoint \ + util-linux-getopt \ +" + +RDEPENDS:${PN}:append:libc-glibc = " glibc-utils" + +RDEPENDS:${PN}-ptest += "file make gmp nettle gnutls bash libgcc" + +RDEPENDS:${PN}-networking += "iptables" + +SRC_URI = "git://github.com/lxc/lxc.git;branch=stable-5.0;protocol=https \ + file://lxc-1.0.0-disable-udhcp-from-busybox-template.patch \ + file://run-ptest \ + file://templates-actually-create-DOWNLOAD_TEMP-directory.patch \ + file://template-make-busybox-template-compatible-with-core-.patch \ + file://templates-use-curl-instead-of-wget.patch \ + file://0001-download-don-t-try-compatbility-index.patch \ + file://tests-our-init-is-not-busybox.patch \ + file://0001-template-if-busybox-contains-init-use-it-in-containe.patch \ + file://dnsmasq.conf \ + file://lxc-net \ + " + +SRCREV = "727adc05220e9b8b594c5bc2124bef5b2e0abe7a" +PV = "5.0.2+git${SRCPV}" + +S = "${WORKDIR}/git" + +# Let's not configure for the host distro. +# +PTEST_CONF = "${@bb.utils.contains('DISTRO_FEATURES', 'ptest', '-Dtests=true', '', d)}" + +# No meson equivalent for --with-distro +# EXTRA_OECONF += "--with-distro=${DISTRO} ${PTEST_CONF}" +EXTRA_OEMESON += "${PTEST_CONF}" +# No meson equivalent for these yet +# EXTRA_OECONF += "--enable-log-src-basename --disable-werror" + +PACKAGECONFIG ??= "templates \ + ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', 'selinux', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'seccomp', 'seccomp', '', d)} \ +" + +# Meson doesn't seem to be as fine grained as the autotools releases +# PACKAGECONFIG[doc] = "--enable-doc --enable-api-docs,--disable-doc --disable-api-docs,," +PACKAGECONFIG[doc] = "-Dman=true,-Dman=false,," +# No meson equiv found for rpath yet +# PACKAGECONFIG[rpath] = "--enable-rpath,--disable-rpath,," +PACKAGECONFIG[apparmor] = "-Dapparmor=true,-Dapparmor=false,apparmor,apparmor" +PACKAGECONFIG[templates] = ",,, ${PN}-templates" +PACKAGECONFIG[selinux] = "-Dselinux=true,-Dselinux=false,libselinux,libselinux" +PACKAGECONFIG[seccomp] ="-Dseccomp=true,-Dseccomp=false,libseccomp,libseccomp" +# meson equiv for the unitdir found yet +# PACKAGECONFIG[systemd] = "--with-systemdsystemunitdir=${systemd_unitdir}/system/,--without-systemdsystemunitdir,systemd," +PACKAGECONFIG[systemd] = "-Dinit-script=systemd,-Dinit-script=sysvinit,systemd," + +# required by python3 to run setup.py +export BUILD_SYS +export HOST_SYS +export STAGING_INCDIR +export STAGING_LIBDIR + +inherit meson pkgconfig ptest update-rc.d systemd python3native + +SYSTEMD_PACKAGES = "${PN} ${PN}-networking" +SYSTEMD_SERVICE:${PN} = "lxc.service lxc-monitord.service" +SYSTEMD_AUTO_ENABLE:${PN} = "disable" +SYSTEMD_SERVICE:${PN}-networking = "lxc-net.service" +SYSTEMD_AUTO_ENABLE:${PN}-networking = "enable" + +INITSCRIPT_PACKAGES = "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '', '${PN}', d)} ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '', '${PN}-networking',d)}" +INITSCRIPT_NAME:${PN} = "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '', 'lxc-containers', d)}" +INITSCRIPT_PARAMS:${PN} = "defaults" +INITSCRIPT_NAME:${PN}-networking = "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '', 'lxc-net', d)}" +INITSCRIPT_PARAMS:${PN}-networking = "defaults" + +FILES:${PN}-doc = "${mandir} ${infodir}" +# For LXC the docdir only contains example configuration files and should be included in the lxc package +FILES:${PN} += "${docdir}" +FILES:${PN} += "${libdir}/python3*" +FILES:${PN} += "${datadir}/bash-completion" +FILES:${PN}-dbg += "${libexecdir}/lxc/.debug" +FILES:${PN}-dbg += "${libexecdir}/lxc/hooks/.debug" +PACKAGES =+ "${PN}-templates ${PN}-networking ${PN}-lua" +FILES:lua-${PN} = "${datadir}/lua ${libdir}/lua" +FILES:lua-${PN}-dbg += "${libdir}/lua/lxc/.debug" +FILES:${PN}-templates += "${datadir}/lxc/templates" +RDEPENDS:${PN}-templates += "bash" + +FILES:${PN}-networking += " \ + ${sysconfdir}/init.d/lxc-net \ + ${sysconfdir}/default/lxc-net \ +" + +# Not needed for meson +# CACHED_CONFIGUREVARS += " \ +# ac_cv_path_PYTHON='${STAGING_BINDIR_NATIVE}/python3-native/python3' \ +# am_cv_python_pyexecdir='${PYTHON_SITEPACKAGES_DIR}' \ +# am_cv_python_pythondir='${PYTHON_SITEPACKAGES_DIR}' \ +#" + +do_install:append() { + # The /var/cache/lxc directory created by the Makefile + # is wiped out in volatile, we need to create this at boot. + rm -rf ${D}${localstatedir}/cache + install -d ${D}${sysconfdir}/default/volatiles + echo "d root root 0755 ${localstatedir}/cache/lxc none" \ + > ${D}${sysconfdir}/default/volatiles/99_lxc + + for i in `grep -l "#! */bin/bash" ${D}${datadir}/lxc/hooks/*`; do \ + sed -e 's|#! */bin/bash|#!/bin/sh|' -i $i; done + + if "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}"; then + # nothing special for systemd at the moment + true + else + # with meson, these aren't built unless sysvinit is the enabled + # init system. + install -d ${D}${sysconfdir}/init.d + install -m 755 config/init/sysvinit/lxc* ${D}${sysconfdir}/init.d + fi + + # since python3-native is used for install location this will not be + # suitable for the target and we will have to correct the package install + if ${@bb.utils.contains('PACKAGECONFIG', 'python', 'true', 'false', d)}; then + if [ -d ${D}${exec_prefix}/lib/python* ]; then mv ${D}${exec_prefix}/lib/python* ${D}${libdir}/; fi + rmdir --ignore-fail-on-non-empty ${D}${exec_prefix}/lib + fi + + # /etc/default/lxc sources lxc-net, this allows lxc bridge when lxc-networking + # is not installed this results in no lxcbr0, but when lxc-networking is installed + # lxcbr0 will be fully configured. + install -m 644 ${WORKDIR}/lxc-net ${D}${sysconfdir}/default/ + + # Force the main dnsmasq instance to bind only to specified interfaces and + # to not bind to virbr0. Libvirt will run its own instance on this interface. + install -d ${D}/${sysconfdir}/dnsmasq.d + install -m 644 ${WORKDIR}/dnsmasq.conf ${D}/${sysconfdir}/dnsmasq.d/lxc +} + +EXTRA_OEMAKE += "TEST_DIR=${D}${PTEST_PATH}/src/tests" + +do_install_ptest() { + # Move tests to the "ptest directory" + install -d ${D}/${PTEST_PATH}/tests + mv ${D}/usr/bin/lxc-test-* ${D}/${PTEST_PATH}/tests/. +} + +pkg_postinst:${PN}() { + if [ -z "$D" ] && [ -e /etc/init.d/populate-volatile.sh ] ; then + /etc/init.d/populate-volatile.sh update + fi +} + +pkg_postinst:${PN}-networking() { +if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then +cat >> $D/etc/network/interfaces << EOF + +auto lxcbr0 +iface lxcbr0 inet dhcp + bridge_ports eth0 + bridge_fd 0 + bridge_maxwait 0 +EOF + +cat<$D/etc/network/if-pre-up.d/lxcbr0 +#! /bin/sh + +if test "x\$IFACE" = xlxcbr0 ; then + brctl show |grep lxcbr0 > /dev/null 2>/dev/null + if [ \$? != 0 ] ; then + brctl addbr lxcbr0 + brctl addif lxcbr0 eth0 + ip addr flush eth0 + ifconfig eth0 up + fi +fi +EOF +chmod 755 $D/etc/network/if-pre-up.d/lxcbr0 +fi +} diff --git a/meta-openeuler/recipes-core/lxcfs/lxcfs_%.bbappend b/meta-openeuler/recipes-core/lxcfs/lxcfs_%.bbappend new file mode 100644 index 0000000000000000000000000000000000000000..ab7efa0ea8564d2d1693eede7eda63c43a4dbbe7 --- /dev/null +++ b/meta-openeuler/recipes-core/lxcfs/lxcfs_%.bbappend @@ -0,0 +1,22 @@ +SRC_URI = " \ + file://lxcfs-${PV}.tar.gz \ + file://0001-systemd.patch \ + file://0002-show-dev-name-in-container.patch \ + file://0003-lxcfs-fix-cpuinfo-print.patch \ + file://0004-fix-memory-leak.patch \ + file://0005-fix-concurrency-problem.patch \ + file://0006-set-null-after-free.patch \ + file://0007-limit-stat-by-quota-period-setting.patch \ + file://0008-diskstats-support-devicemapper-device.patch \ + file://0009-lxcfs-add-proc-partitions.patch \ + file://0010-lxcfs-proc_diskstats_read-func-obtain-data-from-blki.patch \ + file://0011-add-secure-compile-option-in-meson.patch \ + file://0012-lxcfs-adapt-4.18-kernel.patch \ + file://0013-enable-cfs-option-to-show-correct-proc-cpuinfo-view.patch \ + file://0014-fix-pidfd_open-pidfd_send_signal-function-compilatio.patch \ + file://0015-adapt-meson-build-install.patch \ +" + +SRC_URI:append = " \ + file://systemd-ensure-var-lib-lxcfs-exists.patch \ +" diff --git a/meta-openeuler/recipes-core/lxcfs/lxcfs_4.0.11.bb b/meta-openeuler/recipes-core/lxcfs/lxcfs_4.0.11.bb deleted file mode 100644 index 5760e8ba7712c7f53026d4add7c5f3fd6ff705cc..0000000000000000000000000000000000000000 --- a/meta-openeuler/recipes-core/lxcfs/lxcfs_4.0.11.bb +++ /dev/null @@ -1,57 +0,0 @@ -SUMMARY = " \ -lxcfs is a simple userspace filesystem designed to make containers \ -feel more like a real independent system through. It is usable by \ -any runtime, written in C using libfuse and glib. \ -" - -LICENSE = "LGPL-2.1-or-later" - -inherit autotools pkgconfig systemd - -SRC_URI = " \ - file://lxcfs-${PV}.tar.gz \ - file://0001-systemd.patch \ - file://0002-remove-sysvinit-upstart.patch \ - file://0003-show-dev-name-in-container.patch \ - file://0004-lxcfs-fix-cpuinfo-print.patch \ - file://0005-fix-memory-leak.patch \ - file://0006-fix-concurrency-problem.patch \ - file://0007-set-null-after-free.patch \ - file://0008-fix-hang.patch \ - file://0009-limit-stat-by-quota-period-setting.patch \ - file://0010-diskstats-support-devicemapper-device.patch \ - file://0011-lxcfs-add-proc-partitions.patch \ - file://0012-lxcfs-proc_diskstats_read-func-obtain-data-from-blki.patch \ - file://0013-add-secure-compile-option-in-Makefile.patch \ - file://0014-fix-proc-diskstats-show-in-container.patch \ - file://0015-lxcfs-adapt-4.18-kernel.patch \ - file://0016-remove-lxcfs-tools-dependency-for-common-use.patch \ - file://0017-proc_fuse-fix-wait-child-process-hang.patch \ - file://0018-fix-deadlock-problem-when-subprocess-exit.patch \ - file://0019-fix-dev-read-memory-leak-in-container.patch \ - file://0020-enable-cfs-option-to-show-correct-proc-cpuinfo-view.patch \ - file://0021-fix-pidfd_open-pidfd_send_signal-function-compilatio.patch \ - file://0022-cpuview-fix-possible-use-after-free-in-find_proc_sta.patch \ - file://0023-proc-fix-proc-diskstats-output-format.patch \ -" - -SRC_URI:append = " \ - file://lxcfs-4.0.11-sw.patch \ - file://systemd-ensure-var-lib-lxcfs-exists.patch \ -" - -LIC_FILES_CHKSUM = "file://COPYING;md5=29ae50a788f33f663405488bc61eecb1" -SRC_URI[md5sum] = "9d963976207fb0ca4701428ae0587aeb" -SRC_URI[sha256sum] = "3f28e2f4b04c0090aaf88b72666505f0313768a5254dd48a14c43cf78c543ec8" - -DEPENDS += "fuse" -RDEPENDS:${PN} += "fuse" - -FILES:${PN} += "${datadir}/lxc/config/common.conf.d/*" - -CACHED_CONFIGUREVARS += "ac_cv_path_HELP2MAN='false // No help2man //'" -EXTRA_OECONF += "--with-distro=unknown --with-init-script=${VIRTUAL-RUNTIME_init_manager}" - -SYSTEMD_PACKAGES = "${PN}" -SYSTEMD_SERVICE:${PN} = "lxcfs.service" - diff --git a/meta-openeuler/recipes-core/lxcfs/lxcfs_5.0.4.bb b/meta-openeuler/recipes-core/lxcfs/lxcfs_5.0.4.bb new file mode 100644 index 0000000000000000000000000000000000000000..5d2ad164dd4abb2d0f9ad22ebcd146e672dce7ad --- /dev/null +++ b/meta-openeuler/recipes-core/lxcfs/lxcfs_5.0.4.bb @@ -0,0 +1,26 @@ +SUMMARY = "LXCFS is a userspace filesystem created to avoid kernel limitations" +LICENSE = "LGPL-2.1-or-later" + +REQUIRED_DISTRO_FEATURES ?= "systemd" +inherit meson pkgconfig systemd features_check + +SRC_URI = " \ + https://linuxcontainers.org/downloads/lxcfs/lxcfs-${PV}.tar.gz \ + file://0001-bindings-fix-build-with-newer-linux-libc-headers.patch \ + file://0001-meson.build-force-pid-open-send_signal-detection.patch \ +" + +LIC_FILES_CHKSUM = "file://COPYING;md5=29ae50a788f33f663405488bc61eecb1" +SRC_URI[md5sum] = "00a6632e094d0a2f2308c8365ac91912" +SRC_URI[sha256sum] = "c2b361edc881d5ca8fa2cd3260a4999b8f87afce8d937be2160e5cf0b482c52f" + +DEPENDS += "fuse python3-jinja2-native help2man-native systemd" +RDEPENDS:${PN} += "fuse" + +FILES:${PN} += "${datadir}/lxc/config/common.conf.d/*" + +# help2man doesn't work, so we disable docs +EXTRA_OEMESON += "-Dinit-script=${VIRTUAL-RUNTIME_init_manager} -Ddocs=false" + +SYSTEMD_PACKAGES = "${PN}" +SYSTEMD_SERVICE:${PN} = "lxcfs.service" diff --git a/meta-openeuler/recipes-core/meta/files/openeuler_target_env.sh b/meta-openeuler/recipes-core/meta/files/openeuler_target_env.sh index ea43e3d01939fcb44016263bd9ed9691b15b4ca8..ca5d69aa0186ba552efdcfb2dc91fbcf3187b6a3 100644 --- a/meta-openeuler/recipes-core/meta/files/openeuler_target_env.sh +++ b/meta-openeuler/recipes-core/meta/files/openeuler_target_env.sh @@ -4,6 +4,8 @@ OPENEULER_NATIVESDK_SYSROOT=/opt/buildtools/nativesdk/sysroots/x86_64-pokysdk-li PYTHONBIN=`which python3` PYTHONVERSION=`python3 --version | awk -F "." '{print $2}'` PYTHONPKGPATH="${PYTHONBIN%/*}/../lib/python3.${PYTHONVERSION}/site-packages/" +# auto add COLCON_WORK_PATH for toolchain.cmake, make colcon find pkg install from this path when build +alias colcon='export COLCON_WORK_PATH=`pwd` && colcon' if [ ${PYTHONPKGPATH#${OPENEULER_NATIVESDK_SYSROOT}} != "$PYTHONPKGPATH" ]; then # prepare context for kernel module development when using nativesdk pushd "${SDKTARGETSYSROOT}/usr/src/kernel" diff --git a/meta-openeuler/recipes-core/meta/files/toolchain.cmake b/meta-openeuler/recipes-core/meta/files/toolchain.cmake index 3b18c95b898ac8ae4f344303c60ba467e5cb365c..b3b4cfc130a51ab0a022ec12e1c03d240aadcb09 100644 --- a/meta-openeuler/recipes-core/meta/files/toolchain.cmake +++ b/meta-openeuler/recipes-core/meta/files/toolchain.cmake @@ -49,7 +49,7 @@ set( CMAKE_CXX_LINK_FLAGS " ${OPENEULER_LD_FLAGS} $ENV{LDFLAGS} --sysroot=${TARG # only search in the paths provided so cmake doesnt pick # up libraries and tools from the native build machine -set( CMAKE_FIND_ROOT_PATH ${TARGET_SYSROOT_DIR} ${OPENEULER_NATIVESDK_DIR} ${OPENEULER_NATIVE_SYSROOT_BIN} ${CMAKE_INSTALL_PREFIX} ) +set( CMAKE_FIND_ROOT_PATH ${TARGET_SYSROOT_DIR} ${OPENEULER_NATIVESDK_DIR} ${OPENEULER_NATIVE_SYSROOT_BIN} ${CMAKE_INSTALL_PREFIX} $ENV{COLCON_WORK_PATH} $ENV{EXTRA_ALLOW_PATH_USER}) set( CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY ) set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY ) set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) diff --git a/meta-openeuler/recipes-core/packagegroups/packagegroup-base.bb b/meta-openeuler/recipes-core/packagegroups/packagegroup-base.bb index d13088163d9b5eefb86d0dd6838b1285c741c56f..302de073cebbc8ba77aafd86baf295114b4662e1 100644 --- a/meta-openeuler/recipes-core/packagegroups/packagegroup-base.bb +++ b/meta-openeuler/recipes-core/packagegroups/packagegroup-base.bb @@ -24,7 +24,6 @@ curl \ dosfstools \ e2fsprogs \ e2fsprogs-tune2fs \ -ethercat \ ethtool \ expat \ grep \ @@ -90,6 +89,8 @@ packagegroup-base-libs \ packagegroup-entropy-daemon \ " -RDEPENDS:packagegroup-base-utils:remove:riscv64 = " \ -ethercat \ +# for x86-64 arch, add ethercat-igh intel-cmt-cat +RDEPENDS:packagegroup-base-utils:x86-64:append = " \ + ethercat-igh \ + intel-cmt-cat \ " diff --git a/meta-openeuler/recipes-core/seatd/files/seatd-0.6.4.tar.gz b/meta-openeuler/recipes-core/seatd/files/seatd-0.6.4.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..c94956f935cd6ab1eff6881a5ee34abf1864f297 Binary files /dev/null and b/meta-openeuler/recipes-core/seatd/files/seatd-0.6.4.tar.gz differ diff --git a/meta-openeuler/recipes-core/seatd/seatd_%.bbappend b/meta-openeuler/recipes-core/seatd/seatd_%.bbappend new file mode 100644 index 0000000000000000000000000000000000000000..ff61ef20db0c6259c4be6956a90774358081633f --- /dev/null +++ b/meta-openeuler/recipes-core/seatd/seatd_%.bbappend @@ -0,0 +1,14 @@ +# main bb: yocto-poky/meta/recipes-core/seatd/seatd_0.6.4.bb + +OPENEULER_SRC_URI_REMOVE = "https http git" + +FILESEXTRAPATHS:prepend := "${THISDIR}/files/:" + +PV = "0.6.4" + +SRC_URI += " \ + file://seatd-${PV}.tar.gz \ +" + +S = "${WORKDIR}/seatd-${PV}" + diff --git a/meta-openeuler/recipes-devtools/dnf/dnf_%.bbappend b/meta-openeuler/recipes-devtools/dnf/dnf_%.bbappend index 362c0d300cd06b877322c82f8414b664a98859b1..9ffc9727c8ccf1422339644bb4ebbab90348c148 100644 --- a/meta-openeuler/recipes-devtools/dnf/dnf_%.bbappend +++ b/meta-openeuler/recipes-devtools/dnf/dnf_%.bbappend @@ -17,7 +17,7 @@ SRC_URI:prepend = " \ " # add default repo -SRC_URI += " \ +SRC_URI:append:class-target = " \ file://openEuler.repo \ " @@ -25,11 +25,11 @@ S = "${WORKDIR}/${BP}" SRC_URI[sha256sum] = "7de4eb8e85c4d9a74db6f1f827d2dd3348e265631f8678a1dbf7e3346beaad53" -FILES:${PN} += " \ +FILES:${PN}:append:class-target = " \ /etc/yum.repos.d/openEuler.repo \ " -do_install:append() { +do_install:append:class-target() { mkdir -p ${D}/etc/yum.repos.d/ || echo "" local version_dir="openEuler-${DISTRO_VERSION}" sed -i "s/OPENEULER_VER/${version_dir}/g" ${WORKDIR}/openEuler.repo diff --git a/meta-openeuler/recipes-devtools/dnf/files/aarch64/openEuler.repo b/meta-openeuler/recipes-devtools/dnf/files/openEuler.repo similarity index 44% rename from meta-openeuler/recipes-devtools/dnf/files/aarch64/openEuler.repo rename to meta-openeuler/recipes-devtools/dnf/files/openEuler.repo index 41b2e4784a35f38cae0efe220b1e5bfbf075c157..391f0efd25a1fc4f6444507b4b213a332099da11 100644 --- a/meta-openeuler/recipes-devtools/dnf/files/aarch64/openEuler.repo +++ b/meta-openeuler/recipes-devtools/dnf/files/openEuler.repo @@ -9,42 +9,42 @@ [OS] name=OS -baseurl=http://repo.openeuler.org/OPENEULER_VER/OS/$basearch/ +baseurl=http://repo.openeuler.openatom.cn/OPENEULER_VER/OS/$basearch/ enabled=1 gpgcheck=1 -gpgkey=http://repo.openeuler.org/OPENEULER_VER/OS/$basearch/RPM-GPG-KEY-openEuler +gpgkey=http://repo.openeuler.openatom.cn/OPENEULER_VER/OS/$basearch/RPM-GPG-KEY-openEuler [everything] name=everything -baseurl=http://repo.openeuler.org/OPENEULER_VER/everything/$basearch/ +baseurl=http://repo.openeuler.openatom.cn/OPENEULER_VER/everything/$basearch/ enabled=1 gpgcheck=1 -gpgkey=http://repo.openeuler.org/OPENEULER_VER/everything/$basearch/RPM-GPG-KEY-openEuler +gpgkey=http://repo.openeuler.openatom.cn/OPENEULER_VER/everything/$basearch/RPM-GPG-KEY-openEuler [EPOL] name=EPOL -baseurl=http://repo.openeuler.org/OPENEULER_VER/EPOL/main/$basearch/ +baseurl=http://repo.openeuler.openatom.cn/OPENEULER_VER/EPOL/main/$basearch/ enabled=1 gpgcheck=1 -gpgkey=http://repo.openeuler.org/OPENEULER_VER/OS/$basearch/RPM-GPG-KEY-openEuler +gpgkey=http://repo.openeuler.openatom.cn/OPENEULER_VER/OS/$basearch/RPM-GPG-KEY-openEuler [debuginfo] name=debuginfo -baseurl=http://repo.openeuler.org/OPENEULER_VER/debuginfo/$basearch/ +baseurl=http://repo.openeuler.openatom.cn/OPENEULER_VER/debuginfo/$basearch/ enabled=1 gpgcheck=1 -gpgkey=http://repo.openeuler.org/OPENEULER_VER/debuginfo/$basearch/RPM-GPG-KEY-openEuler +gpgkey=http://repo.openeuler.openatom.cn/OPENEULER_VER/debuginfo/$basearch/RPM-GPG-KEY-openEuler [source] name=source -baseurl=http://repo.openeuler.org/OPENEULER_VER/source/ +baseurl=http://repo.openeuler.openatom.cn/OPENEULER_VER/source/ enabled=1 gpgcheck=1 -gpgkey=http://repo.openeuler.org/OPENEULER_VER/source/RPM-GPG-KEY-openEuler +gpgkey=http://repo.openeuler.openatom.cn/OPENEULER_VER/source/RPM-GPG-KEY-openEuler [update] name=update -baseurl=http://repo.openeuler.org/OPENEULER_VER/update/$basearch/ +baseurl=http://repo.openeuler.openatom.cn/OPENEULER_VER/update/$basearch/ enabled=1 gpgcheck=1 -gpgkey=http://repo.openeuler.org/OPENEULER_VER/OS/$basearch/RPM-GPG-KEY-openEuler +gpgkey=http://repo.openeuler.openatom.cn/OPENEULER_VER/OS/$basearch/RPM-GPG-KEY-openEuler diff --git a/meta-openeuler/recipes-devtools/flatbuffers/flatbuffers_%.bbappend b/meta-openeuler/recipes-devtools/flatbuffers/flatbuffers_%.bbappend index 0db87c5aef965cdb13c088ff2449be59cf90666c..9704d0cd019b7b28ffd1a4729395135ea0463791 100644 --- a/meta-openeuler/recipes-devtools/flatbuffers/flatbuffers_%.bbappend +++ b/meta-openeuler/recipes-devtools/flatbuffers/flatbuffers_%.bbappend @@ -2,7 +2,6 @@ PV = "23.5.26" LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" -# find patches under openeuler at firse FILESEXTRAPATHS:prepend := "${THISDIR}/files/:" SRCREV = "482e2ea3dc95339111ce48e1f4ae1ac646ad07b3" diff --git a/meta-openeuler/recipes-devtools/libdnf/libdnf_%.bbappend b/meta-openeuler/recipes-devtools/libdnf/libdnf_%.bbappend index 8d7025697a2b7e10257b69fa57a2e017a739fd4c..ad7fc7d4d9c5a3f185c2edf207c7dec3412ea68e 100644 --- a/meta-openeuler/recipes-devtools/libdnf/libdnf_%.bbappend +++ b/meta-openeuler/recipes-devtools/libdnf/libdnf_%.bbappend @@ -1,8 +1,8 @@ PV = "0.69.0" -#export CONFIG_SHELL="/bin/bash" +# export CONFIG_SHELL="/bin/bash" # fix rpm install error, depends to /bin/bash -RDEPENDS:${PN} += "busybox" +RDEPENDS:${PN}:append:class-target = " busybox" # add new patches from openeuler SRC_URI = " \ @@ -21,11 +21,7 @@ SRC_URI += " \ file://0001-libdnf-dnf-context.cpp-do-not-try-to-access-BDB-data.patch \ " - - SRC_URI[sha256sum] = "b615a6f7e1d1d82c928d2c79b36242a29d04cd28e267a5e8a6996435d9f97997" S = "${WORKDIR}/${BP}" -# delete depends to prelink from gobject-introspection.bbclass -DEPENDS:remove:class-target = " prelink-native" diff --git a/meta-openeuler/recipes-devtools/libmodulemd/libmodulemd_%.bbappend b/meta-openeuler/recipes-devtools/libmodulemd/libmodulemd_%.bbappend index 9d13dbbf602e6a079536bdf80e6d65c9dc66df02..1f78142c098148435bce1da1ed098fcde79bc964 100644 --- a/meta-openeuler/recipes-devtools/libmodulemd/libmodulemd_%.bbappend +++ b/meta-openeuler/recipes-devtools/libmodulemd/libmodulemd_%.bbappend @@ -1,4 +1,4 @@ -PV = "2.14.0" +PV = "2.15.0" SRC_URI = " \ https://github.com/fedora-modularity/libmodulemd/releases/download/libmodulemd-${PV}/modulemd-${PV}.tar.xz \ @@ -6,7 +6,5 @@ SRC_URI = " \ S = "${WORKDIR}/modulemd-${PV}" -SRC_URI[sha256sum] = "8087942cc290c0df486931233446fb4bce786cd9ff92eb72384731cd4d36f6ef" +SRC_URI[sha256sum] = "15458323d1d1f614f9e706f623794f95d23e59f4c37deeaa16877463aee34af5" -# delete depends to prelink from gobject-introspection.bbclass -DEPENDS:remove:class-target = " prelink-native" diff --git a/meta-openeuler/recipes-devtools/mtd/mtd-utils_%.bbappend b/meta-openeuler/recipes-devtools/mtd/mtd-utils_%.bbappend index 2a41385d7b977a6f9d44194434fc8a0d38dcf408..03f6f3f877c1ac8b95ee8318c1aa8b37e0975f52 100644 --- a/meta-openeuler/recipes-devtools/mtd/mtd-utils_%.bbappend +++ b/meta-openeuler/recipes-devtools/mtd/mtd-utils_%.bbappend @@ -4,8 +4,12 @@ PV = "2.1.4" SRC_URI:remove = "git://git.infradead.org/mtd-utils.git;branch=master" -SRC_URI:prepend = "file://${BP}.tar.bz2 \ - " +SRC_URI:prepend = " \ + file://${BP}.tar.bz2 \ + file://0001-tests-Remove-unused-linux-fs.h-header-from-includes.patch \ +" + +SRC_URI[sha256sum] = "2c6711d15d282c47cb3867b6857340597e26d332c238465134c602e5eef71b99" S = "${WORKDIR}/${BP}" diff --git a/meta-openeuler/recipes-devtools/perl/files/0001-CheckLib.pm-do-not-attempt-to-run-a-cross-executable.patch b/meta-openeuler/recipes-devtools/perl/files/0001-CheckLib.pm-do-not-attempt-to-run-a-cross-executable.patch new file mode 100644 index 0000000000000000000000000000000000000000..c5bbe7888edb8c0994ab15ba45e48b77e543238a --- /dev/null +++ b/meta-openeuler/recipes-devtools/perl/files/0001-CheckLib.pm-do-not-attempt-to-run-a-cross-executable.patch @@ -0,0 +1,24 @@ +From a033c9ece12b6eead48eed63f106ccdec6159b0c Mon Sep 17 00:00:00 2001 +From: Alexander Kanavin +Date: Fri, 20 Dec 2019 16:26:55 +0100 +Subject: [PATCH] CheckLib.pm: do not attempt to run a cross executable + +Upstream-Status: Inappropriate [oe-core specific] +Signed-off-by: Alexander Kanavin +--- + inc/Devel/CheckLib.pm | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/inc/Devel/CheckLib.pm b/inc/Devel/CheckLib.pm +index 36a451a..b04acc1 100644 +--- a/inc/Devel/CheckLib.pm ++++ b/inc/Devel/CheckLib.pm +@@ -330,7 +330,7 @@ sub assert_lib { + push @missing, $lib if $rv != 0 || !-x $exefile; + my $absexefile = File::Spec->rel2abs($exefile); + $absexefile = '"' . $absexefile . '"' if $absexefile =~ m/\s/; +- push @wrongresult, $lib if $rv == 0 && -x $exefile && system($absexefile) != 0; ++ push @wrongresult, $lib if $rv == 0 && -x $exefile && 0 != 0; + unlink $ofile if -e $ofile; + _cleanup_exe($exefile); + } diff --git a/meta-openeuler/recipes-devtools/perl/files/0001-Somehow-this-module-breaks-through-the-perl-wrapper-.patch b/meta-openeuler/recipes-devtools/perl/files/0001-Somehow-this-module-breaks-through-the-perl-wrapper-.patch new file mode 100644 index 0000000000000000000000000000000000000000..ed8ec1d416850342dbce907979300820ca70f111 --- /dev/null +++ b/meta-openeuler/recipes-devtools/perl/files/0001-Somehow-this-module-breaks-through-the-perl-wrapper-.patch @@ -0,0 +1,34 @@ +From e8e095b9c71c58f8197d6315359446b6b084cb2b Mon Sep 17 00:00:00 2001 +From: Alexander Kanavin +Date: Tue, 5 Jun 2018 14:58:42 +0300 +Subject: [PATCH] Somehow this module breaks through the perl wrapper and + declares perl binary to be 'perl.real'. This patch forces it back to perl. + +Upstream-Status: Inappropriate [oe-core specific] +Signed-off-by: Alexander Kanavin +--- + cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm +index 948c476..f537526 100644 +--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm ++++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm +@@ -1110,6 +1110,9 @@ WARNING + } + + foreach my $name (@$names){ ++ # Getting MakeMaker.pm use perl wrapper instead of 'perl.real' directly ++ $name =~ s/perl\.real/perl/ if ($name =~ /perl\.real/); ++ + my ($abs, $use_dir); + if ($self->file_name_is_absolute($name)) { # /foo/bar + $abs = $name; +@@ -2006,6 +2009,7 @@ sub init_PERL { + + $self->{PERL} ||= + $self->find_perl(5.0, \@perls, \@defpath, $Verbose ); ++ + + my $perl = $self->{PERL}; + $perl =~ s/^"//; diff --git a/meta-openeuler/recipes-devtools/perl/files/0001-cpan-Sys-Syslog-Makefile.PL-Fix-_PATH_LOG-for-determ.patch b/meta-openeuler/recipes-devtools/perl/files/0001-cpan-Sys-Syslog-Makefile.PL-Fix-_PATH_LOG-for-determ.patch new file mode 100644 index 0000000000000000000000000000000000000000..63815d44fb6aa7e19bf96cea849cc85c87dfaf37 --- /dev/null +++ b/meta-openeuler/recipes-devtools/perl/files/0001-cpan-Sys-Syslog-Makefile.PL-Fix-_PATH_LOG-for-determ.patch @@ -0,0 +1,36 @@ +From a73fff1fcf0def4ce93964f1b63fe3ad0967259d Mon Sep 17 00:00:00 2001 +From: Robert Yang +Date: Fri, 18 Feb 2022 09:44:26 +0000 +Subject: [PATCH] cpan/Sys-Syslog/Makefile.PL: Fix _PATH_LOG for deterministic + +It checks host's path such as /dev/log and uses it, this doesn't make sense for +cross build, and it causes undeterministic, for example, the contianer os +usually doesn't have /dev/log which leads to a different build result since +other host usually has /dev/log, so make it always use the default value to fix +the issue. + +Submitted a ticket to upstream: https://rt.cpan.org/Ticket/Display.html?id=141612 + +Upstream-Status: Inappropriate [OE specific] + +Signed-off-by: Robert Yang +--- + cpan/Sys-Syslog/Makefile.PL | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/cpan/Sys-Syslog/Makefile.PL b/cpan/Sys-Syslog/Makefile.PL +index d09ba69..d44e58c 100644 +--- a/cpan/Sys-Syslog/Makefile.PL ++++ b/cpan/Sys-Syslog/Makefile.PL +@@ -130,6 +130,8 @@ else { + $_PATH_LOG = ""; + } + ++# OE specific ++$_PATH_LOG = ""; + + # if possible, generate the code that handles the constants with + # ExtUtils::Constant, otherwise use cached copy in fallback/ +-- +2.31.1 + diff --git a/meta-openeuler/recipes-devtools/perl/files/0002-Constant-Fix-up-shebang.patch b/meta-openeuler/recipes-devtools/perl/files/0002-Constant-Fix-up-shebang.patch new file mode 100644 index 0000000000000000000000000000000000000000..686cc7167bb8310b479a22d40720c3df1bd2bb0d --- /dev/null +++ b/meta-openeuler/recipes-devtools/perl/files/0002-Constant-Fix-up-shebang.patch @@ -0,0 +1,32 @@ +From 260ebd15e16cd86b9b58e5c5f3a496b3853ca46d Mon Sep 17 00:00:00 2001 +From: Joshua Watt +Date: Mon, 17 Jun 2019 10:47:23 -0500 +Subject: [PATCH 2/2] Constant: Fix up shebang + +The instructions indicate that the script should be explicitly passed to +"perl -x", so automatically setting the #! to be ^X is unnecessary and +makes the file non-reproducible when building because ^X could be the +absolute path to miniperl. + +Signed-off-by: Joshua Watt +Upstream-Status: Submitted [https://rt.cpan.org/Public/Bug/Display.html?id=129866] +--- + cpan/ExtUtils-Constant/lib/ExtUtils/Constant/XS.pm | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/cpan/ExtUtils-Constant/lib/ExtUtils/Constant/XS.pm b/cpan/ExtUtils-Constant/lib/ExtUtils/Constant/XS.pm +index 14eb809714..d4d074e121 100644 +--- a/cpan/ExtUtils-Constant/lib/ExtUtils/Constant/XS.pm ++++ b/cpan/ExtUtils-Constant/lib/ExtUtils/Constant/XS.pm +@@ -219,7 +219,7 @@ sub dogfood { + Regenerate these constant functions by feeding this entire source file to + perl -x + +-#!$^X -w ++#!/usr/bin/env perl -x -w + use ExtUtils::Constant qw (constant_types C_constant XS_constant); + + EOT +-- +2.21.0 + diff --git a/meta-openeuler/recipes-devtools/perl/files/determinism.patch b/meta-openeuler/recipes-devtools/perl/files/determinism.patch new file mode 100644 index 0000000000000000000000000000000000000000..aa85ccef1007f88467c2d8e39653ab6874f54b07 --- /dev/null +++ b/meta-openeuler/recipes-devtools/perl/files/determinism.patch @@ -0,0 +1,45 @@ +Fixes to make the perl build reproducible: + +a) Remove the \n from configure_attr.sh since it gets quoted differently depending on + whether the shell is bash or dash which can cause the test result to be incorrect. + Reported upstream: https://github.com/arsv/perl-cross/issues/87 + +b) Sort the order of the module lists from configure_mods.sh since otherwise + the result isn't the same leading to makefile differences. + Reported upstream: https://github.com/arsv/perl-cross/issues/88 + +c) Sort the Encode::Byte byte_t.fnm file output (and the makefile depends whilst + there for good measure) + This needs to go to upstream perl (not done) + +d) Use bash for perl-cross configure since otherwise trnl gets set to "\n" with bash + and "" with dash + Reported upstream: https://github.com/arsv/perl-cross/issues/87 + +RP 2020/2/7 + +Upstream-Status: Pending [75% submitted] +Signed-off-by: Richard Purdie catfile($dir,$file); + if ( length($str)-$lengthsofar > 128*$numlines ) +@@ -189,7 +189,7 @@ sub postamble + qq{\n\t\$(PERL) $plib $enc2xs $ucopts -o \$\@ -f $table.fnm\n\n}; + open (FILELIST, ">$table.fnm") + || die "Could not open $table.fnm: $!"; +- foreach my $file (@{$tables{$table}}) ++ foreach my $file (sort (@{$tables{$table}})) + { + print FILELIST $self->catfile($dir,$file) . "\n"; + } diff --git a/meta-openeuler/recipes-devtools/perl/files/encodefix.patch b/meta-openeuler/recipes-devtools/perl/files/encodefix.patch new file mode 100644 index 0000000000000000000000000000000000000000..396ed0d53e3efb4ebf14e1df8dcb76b412cb4c42 --- /dev/null +++ b/meta-openeuler/recipes-devtools/perl/files/encodefix.patch @@ -0,0 +1,20 @@ +The code is encoding host compiler parameters into target builds. Avoid +this for our target builds (patch is target specific, not native) + +Upstream-Status: Inappropriate [Cross compile hack] +RP 2020/2/18 +Signed-off-by: Richard Purdie + +Index: perl-5.30.1/cpan/Encode/bin/enc2xs +=================================================================== +--- perl-5.30.1.orig/cpan/Encode/bin/enc2xs ++++ perl-5.30.1/cpan/Encode/bin/enc2xs +@@ -195,7 +195,7 @@ sub compiler_info { + # above becomes false. + my $sized = $declaration && !($compat && !$pedantic); + +- return ($cpp, $static, $sized); ++ return (0, 1, 1); + } + + diff --git a/meta-openeuler/recipes-devtools/perl/files/errno_ver.diff b/meta-openeuler/recipes-devtools/perl/files/errno_ver.diff new file mode 100644 index 0000000000000000000000000000000000000000..a965fbeeecf64584446ec71a4a75113ac91791df --- /dev/null +++ b/meta-openeuler/recipes-devtools/perl/files/errno_ver.diff @@ -0,0 +1,37 @@ +From 8e1efba7560d8d55524c7a0f1b0539ddce419b86 Mon Sep 17 00:00:00 2001 +From: Brendan O'Dea +Date: Fri, 16 Dec 2005 01:32:14 +1100 +Subject: [PATCH 6/8] Remove Errno version check due to upgrade problems with + long-running processes. + +Bug-Debian: http://bugs.debian.org/343351 + +Remove version check which can cause problems for long running +processes embedding perl when upgrading to a newer version, +compatible, but built on a different machine. + +Patch-Name: debian/errno_ver.diff +Upstream-Status: Pending +--- + ext/Errno/Errno_pm.PL | 5 ----- + 1 file changed, 5 deletions(-) + +diff --git a/ext/Errno/Errno_pm.PL b/ext/Errno/Errno_pm.PL +index 6251a3c..eeed445 100644 +--- a/ext/Errno/Errno_pm.PL ++++ b/ext/Errno/Errno_pm.PL +@@ -294,11 +294,6 @@ EDQ + # they've already declared perl doesn't need to worry about this risk. + if(!$ENV{'PERL_BUILD_EXPAND_CONFIG_VARS'}) { + print <<"CONFIG_CHECK_END"; +-use Config; +-"\$Config{'archname'}-\$Config{'osvers'}" eq +-"$archname-$Config{'osvers'}" or +- die "Errno architecture ($archname-$Config{'osvers'}) does not match executable architecture (\$Config{'archname'}-\$Config{'osvers'})"; +- + CONFIG_CHECK_END + } + +-- +2.1.4 + diff --git a/meta-openeuler/recipes-devtools/perl/files/native-perlinc.patch b/meta-openeuler/recipes-devtools/perl/files/native-perlinc.patch new file mode 100644 index 0000000000000000000000000000000000000000..20d7fe6060457468ef46c202b9cfa91c044426cd --- /dev/null +++ b/meta-openeuler/recipes-devtools/perl/files/native-perlinc.patch @@ -0,0 +1,27 @@ +Upstream-Status: Inappropriate [embedded specific] +Signed-off-by: Alexander Kanavin + +Index: perl-5.8.8/lib/ExtUtils/MM_Unix.pm +=================================================================== +--- perl-5.12.3.orig/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm 2008-10-31 22:01:35.000000000 +0000 ++++ perl-5.12.3/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm 2008-10-31 22:01:35.000000000 +0000 +@@ -1597,6 +1597,19 @@ + $self->{PERL_LIB} ||= $Config{privlibexp}; + $self->{PERL_ARCHLIB} ||= $Config{archlibexp}; + $self->{PERL_INC} = $self->catdir("$self->{PERL_ARCHLIB}","CORE"); # wild guess for now ++ # Check for environment override so we'll find the headers in the correct place ++ if (defined $ENV{PERL_LIB}) ++ { ++ $self->{PERL_LIB} = $ENV{PERL_LIB}; ++ } ++ if (defined $ENV{PERL_ARCHLIB}) ++ { ++ $self->{PERL_ARCHLIB} = $ENV{PERL_ARCHLIB}; ++ } ++ if (defined $ENV{PERL_INC}) ++ { ++ $self->{PERL_INC} = $ENV{PERL_INC}; ++ } + my $perl_h; + + if (not -f ($perl_h = $self->catfile($self->{PERL_INC},"perl.h")) diff --git a/meta-openeuler/recipes-devtools/perl/files/perl-configpm-switch.patch b/meta-openeuler/recipes-devtools/perl/files/perl-configpm-switch.patch new file mode 100644 index 0000000000000000000000000000000000000000..0be1d5a93c5799738370453f49f1e1049957d8c7 --- /dev/null +++ b/meta-openeuler/recipes-devtools/perl/files/perl-configpm-switch.patch @@ -0,0 +1,57 @@ +From c25d460a2f00e9af25087d40447fe1a81c89710c Mon Sep 17 00:00:00 2001 +From: Alexander Kanavin +Date: Sun, 27 May 2007 21:04:11 +0000 +Subject: [PATCH] perl: 5.8.7 -> 5.8.8 (from OE) + +This patch is used for perl-native only. It enables the switching of +configuration files between Config_heavy.pl and +Config_heavy-target.pl by setting the environment variables +PERLCONFIGTARGET - the later containing settings for the target while +the former contains those for the host. This will allow cpan.bbclass +to use the settings appropriate for the native and/or target builds +as required. This also disables the use of the cache since the cached +values would be valid for the host only. + +Upstream-Status: Inappropriate [native] +Signed-off-by: Alexander Kanavin + +--- + configpm | 18 ++++++++++++++++-- + 1 file changed, 16 insertions(+), 2 deletions(-) + +diff --git a/configpm b/configpm +index 07219d8..01a23fa 100755 +--- a/configpm ++++ b/configpm +@@ -718,7 +718,7 @@ $config_txt .= uncomment <<'ENDOFEND'; + # my($self, $key) = @_; + # + # # check for cached value (which may be undef so we use exists not defined) +-# return exists $self->{$key} ? $self->{$key} : $self->fetch_string($key); ++# return $self->fetch_string($key); + # } + # + ENDOFEND +@@ -876,7 +876,21 @@ $config_txt .= sprintf uncomment <<'ENDOFTIE', $fast_config; + # sub DESTROY { } + # + # sub AUTOLOAD { +-# require 'Config_heavy.pl'; ++# my $cfgfile = 'Config_heavy.pl'; ++# if (defined $ENV{PERLCONFIGTARGET} and $ENV{PERLCONFIGTARGET} eq "yes") ++# { ++# $cfgfile = 'Config_heavy-target.pl'; ++# } ++# if (defined $ENV{PERL_ARCHLIB}) ++# { ++# push @INC, $ENV{PERL_ARCHLIB}; ++# require $cfgfile; ++# pop @INC; ++# } ++# else ++# { ++# require $cfgfile; ++# } + # goto \&launcher unless $Config::AUTOLOAD =~ /launcher$/; + # die "&Config::AUTOLOAD failed on $Config::AUTOLOAD"; + # } diff --git a/meta-openeuler/recipes-devtools/perl/files/perl-dynloader.patch b/meta-openeuler/recipes-devtools/perl/files/perl-dynloader.patch new file mode 100644 index 0000000000000000000000000000000000000000..887f7c0f7ff86ba3ef82f4328148aa12a08d8595 --- /dev/null +++ b/meta-openeuler/recipes-devtools/perl/files/perl-dynloader.patch @@ -0,0 +1,38 @@ +Upstream-Status: Inappropriate [embedded specific] + +Allow the location that .so files are searched for for dynamic +loading to be changed via an environment variable. This is to allow +us to load .so's from the host system while building for the target +system. + +Update by Nitin A Kamble 2011/04/21 + +Index: perl-5.24.1/dist/XSLoader/XSLoader_pm.PL +=================================================================== +--- perl-5.24.1.orig/dist/XSLoader/XSLoader_pm.PL ++++ perl-5.24.1/dist/XSLoader/XSLoader_pm.PL +@@ -52,6 +52,24 @@ sub load { + my ($caller, $modlibname) = caller(); + my $module = $caller; + ++ # OE: Allow env to form dynamic loader to look in a different place ++ # This is so it finds the host .so files, not the targets ++ if (defined $ENV{PERLHOSTLIB}) ++ { ++ my $hostlib = $ENV{PERLHOSTLIB}; ++ my $hostarchlib = $ENV{PERLHOSTARCHLIB}; ++ print STDERR "*** Module name IN: $modlibname\n"; ++ my ($p1, $p2, $p3, $p4, $p5, $p6, $p7) = $modlibname =~ m/(^(.*lib\w*\/)?)((perl5\/[0-9\.]*\/)?)(([^\/]*)\/)?(.*)$/; ++ print STDERR "*** p1: $p1 p3: $p3 p5: $p5 p7: $p7\n"; ++ if ( $p1 ne "" ) { ++ $modlibname = $hostlib.$p7; ++ } ++ if ( $p6 ne "" ) { ++ $modlibname = $hostarchlib.$p7; ++ } ++ print STDERR "*** Module name OUT: $modlibname\n"; ++ } ++ + if (@_) { + $module = $_[0]; + } else { diff --git a/meta-openeuler/recipes-devtools/perl/files/perl-rdepends.txt b/meta-openeuler/recipes-devtools/perl/files/perl-rdepends.txt new file mode 100644 index 0000000000000000000000000000000000000000..e5f45bf291041c36fe285cf977979901214b2a59 --- /dev/null +++ b/meta-openeuler/recipes-devtools/perl/files/perl-rdepends.txt @@ -0,0 +1,2338 @@ + +# Some additional dependencies that the above doesn't manage to figure out +RDEPENDS:perl-module-file-spec += "perl-module-file-spec-unix" +RDEPENDS:perl-module-scalar-util += "perl-module-list-util" +RDEPENDS:perl-module-file-temp += "perl-module-scalar-util" +RDEPENDS:perl-module-file-temp += "perl-module-file-spec" +RDEPENDS:perl-module-io-file += "perl-module-symbol" +RDEPENDS:perl-module-io-file += "perl-module-carp" +RDEPENDS:perl-module-math-bigint += "perl-module-math-bigint-calc" +RDEPENDS:perl-module-test-builder += "perl-module-list-util" +RDEPENDS:perl-module-test-builder += "perl-module-scalar-util" +RDEPENDS:perl-module-test-builder-formatter += "perl-module-test2-formatter-tap" +RDEPENDS:perl-module-test2-api += "perl-module-test2-event-fail" +RDEPENDS:perl-module-test2-api += "perl-module-test2-event-pass" +RDEPENDS:perl-module-test2-api += "perl-module-test2-event-v2" +RDEPENDS:perl-module-test2-formatter-tap += "perl-module-test2-formatter" +RDEPENDS:perl-module-thread-queue += "perl-module-attributes" +RDEPENDS:perl-module-overload += "perl-module-overloading" + +# Generated depends list beyond this line +RDEPENDS:perl-module-anydbm-file += "perl-module-strict" +RDEPENDS:perl-module-anydbm-file += "perl-module-warnings" +RDEPENDS:perl-module-app-cpan += "perl-module-config" +RDEPENDS:perl-module-app-cpan += "perl-module-constant" +RDEPENDS:perl-module-app-cpan += "perl-module-cpan" +RDEPENDS:perl-module-app-cpan += "perl-module-cwd" +RDEPENDS:perl-module-app-cpan += "perl-module-data-dumper" +RDEPENDS:perl-module-app-cpan += "perl-module-file-basename" +RDEPENDS:perl-module-app-cpan += "perl-module-file-find" +RDEPENDS:perl-module-app-cpan += "perl-module-getopt-std" +RDEPENDS:perl-module-app-cpan += "perl-module-if" +RDEPENDS:perl-module-app-cpan += "perl-module-net-ping" +RDEPENDS:perl-module-app-cpan += "perl-module-strict" +RDEPENDS:perl-module-app-cpan += "perl-module-user-pwent" +RDEPENDS:perl-module-app-cpan += "perl-module-vars" +RDEPENDS:perl-module-app-cpan += "perl-module-warnings" +RDEPENDS:perl-module-app-prove += "perl-module-app-prove-state" +RDEPENDS:perl-module-app-prove += "perl-module-base" +RDEPENDS:perl-module-app-prove += "perl-module-constant" +RDEPENDS:perl-module-app-prove += "perl-module-getopt-long" +RDEPENDS:perl-module-app-prove += "perl-module-strict" +RDEPENDS:perl-module-app-prove += "perl-module-tap-harness" +RDEPENDS:perl-module-app-prove += "perl-module-tap-harness-env" +RDEPENDS:perl-module-app-prove += "perl-module-text-parsewords" +RDEPENDS:perl-module-app-prove += "perl-module-warnings" +RDEPENDS:perl-module-app-prove-state += "perl-module-app-prove-state-result" +RDEPENDS:perl-module-app-prove-state += "perl-module-base" +RDEPENDS:perl-module-app-prove-state += "perl-module-constant" +RDEPENDS:perl-module-app-prove-state += "perl-module-file-find" +RDEPENDS:perl-module-app-prove-state += "perl-module-strict" +RDEPENDS:perl-module-app-prove-state += "perl-module-tap-parser-yamlish-reader" +RDEPENDS:perl-module-app-prove-state += "perl-module-tap-parser-yamlish-writer" +RDEPENDS:perl-module-app-prove-state += "perl-module-warnings" +RDEPENDS:perl-module-app-prove-state-result += "perl-module-app-prove-state-result-test" +RDEPENDS:perl-module-app-prove-state-result += "perl-module-constant" +RDEPENDS:perl-module-app-prove-state-result += "perl-module-strict" +RDEPENDS:perl-module-app-prove-state-result += "perl-module-warnings" +RDEPENDS:perl-module-app-prove-state-result-test += "perl-module-strict" +RDEPENDS:perl-module-app-prove-state-result-test += "perl-module-warnings" +RDEPENDS:perl-module-archive-tar-constant += "perl-module-constant" +RDEPENDS:perl-module-archive-tar-constant += "perl-module-exporter" +RDEPENDS:perl-module-archive-tar-constant += "perl-module-io-compress-bzip2" +RDEPENDS:perl-module-archive-tar-constant += "perl-module-strict" +RDEPENDS:perl-module-archive-tar-constant += "perl-module-time-local" +RDEPENDS:perl-module-archive-tar-constant += "perl-module-vars" +RDEPENDS:perl-module-archive-tar-constant += "perl-module-warnings" +RDEPENDS:perl-module-archive-tar-file += "perl-module-archive-tar" +RDEPENDS:perl-module-archive-tar-file += "perl-module-archive-tar-constant" +RDEPENDS:perl-module-archive-tar-file += "perl-module-file-basename" +RDEPENDS:perl-module-archive-tar-file += "perl-module-io-file" +RDEPENDS:perl-module-archive-tar-file += "perl-module-strict" +RDEPENDS:perl-module-archive-tar-file += "perl-module-vars" +RDEPENDS:perl-module-archive-tar += "perl-module-archive-tar-constant" +RDEPENDS:perl-module-archive-tar += "perl-module-archive-tar-file" +RDEPENDS:perl-module-archive-tar += "perl-module-config" +RDEPENDS:perl-module-archive-tar += "perl-module-cwd" +RDEPENDS:perl-module-archive-tar += "perl-module-exporter" +RDEPENDS:perl-module-archive-tar += "perl-module-file-path" +RDEPENDS:perl-module-archive-tar += "perl-module-io-file" +RDEPENDS:perl-module-archive-tar += "perl-module-io-zlib" +RDEPENDS:perl-module-archive-tar += "perl-module-strict" +RDEPENDS:perl-module-archive-tar += "perl-module-vars" +RDEPENDS:perl-module-attribute-handlers += "perl-module-strict" +RDEPENDS:perl-module-attribute-handlers += "perl-module-warnings" +RDEPENDS:perl-module-attributes += "perl-module-exporter" +RDEPENDS:perl-module-attributes += "perl-module-strict" +RDEPENDS:perl-module-attributes += "perl-module-warnings" +RDEPENDS:perl-module-attributes += "perl-module-xsloader" +RDEPENDS:perl-module-autodie-exception += "perl-module-constant" +RDEPENDS:perl-module-autodie-exception += "perl-module-fatal" +RDEPENDS:perl-module-autodie-exception += "perl-module-fcntl" +RDEPENDS:perl-module-autodie-exception += "perl-module-overload" +RDEPENDS:perl-module-autodie-exception += "perl-module-strict" +RDEPENDS:perl-module-autodie-exception += "perl-module-warnings" +RDEPENDS:perl-module-autodie-exception-system += "perl-module-parent" +RDEPENDS:perl-module-autodie-exception-system += "perl-module-strict" +RDEPENDS:perl-module-autodie-exception-system += "perl-module-warnings" +RDEPENDS:perl-module-autodie-hints += "perl-module-b" +RDEPENDS:perl-module-autodie-hints += "perl-module-constant" +RDEPENDS:perl-module-autodie-hints += "perl-module-strict" +RDEPENDS:perl-module-autodie-hints += "perl-module-warnings" +RDEPENDS:perl-module-autodie += "perl-module-constant" +RDEPENDS:perl-module-autodie += "perl-module-lib" +RDEPENDS:perl-module-autodie += "perl-module-parent" +RDEPENDS:perl-module-autodie += "perl-module-strict" +RDEPENDS:perl-module-autodie += "perl-module-warnings" +RDEPENDS:perl-module-autodie-scope-guard += "perl-module-strict" +RDEPENDS:perl-module-autodie-scope-guard += "perl-module-warnings" +RDEPENDS:perl-module-autodie-scope-guardstack += "perl-module-autodie-scope-guard" +RDEPENDS:perl-module-autodie-scope-guardstack += "perl-module-strict" +RDEPENDS:perl-module-autodie-scope-guardstack += "perl-module-warnings" +RDEPENDS:perl-module-autodie-skip += "perl-module-strict" +RDEPENDS:perl-module-autodie-skip += "perl-module-warnings" +RDEPENDS:perl-module-autodie-util += "perl-module-autodie-scope-guardstack" +RDEPENDS:perl-module-autodie-util += "perl-module-exporter" +RDEPENDS:perl-module-autodie-util += "perl-module-strict" +RDEPENDS:perl-module-autodie-util += "perl-module-warnings" +RDEPENDS:perl-module-autoloader += "perl-module-strict" +RDEPENDS:perl-module-autosplit += "perl-module-config" +RDEPENDS:perl-module-autosplit += "perl-module-exporter" +RDEPENDS:perl-module-autosplit += "perl-module-file-basename" +RDEPENDS:perl-module-autosplit += "perl-module-file-path" +RDEPENDS:perl-module-autosplit += "perl-module-strict" +RDEPENDS:perl-module-base += "perl-module-strict" +RDEPENDS:perl-module-b-concise += "perl-module-b" +RDEPENDS:perl-module-b-concise += "perl-module-b-op-private" +RDEPENDS:perl-module-b-concise += "perl-module-config" +RDEPENDS:perl-module-b-concise += "perl-module-exporter" +RDEPENDS:perl-module-b-concise += "perl-module-feature" +RDEPENDS:perl-module-b-concise += "perl-module-strict" +RDEPENDS:perl-module-b-concise += "perl-module-warnings" +RDEPENDS:perl-module-benchmark += "perl-module-exporter" +RDEPENDS:perl-module-benchmark += "perl-module-strict" +RDEPENDS:perl-module-bigfloat += "perl-module-constant" +RDEPENDS:perl-module-bigfloat += "perl-module-exporter" +RDEPENDS:perl-module-bigfloat += "perl-module-overload" +RDEPENDS:perl-module-bigfloat += "perl-module-strict" +RDEPENDS:perl-module-bigfloat += "perl-module-warnings" +RDEPENDS:perl-module-bigint += "perl-module-constant" +RDEPENDS:perl-module-bigint += "perl-module-exporter" +RDEPENDS:perl-module-bigint += "perl-module-overload" +RDEPENDS:perl-module-bigint += "perl-module-strict" +RDEPENDS:perl-module-bigint += "perl-module-warnings" +RDEPENDS:perl-module-bignum += "perl-module-constant" +RDEPENDS:perl-module-bignum += "perl-module-exporter" +RDEPENDS:perl-module-bignum += "perl-module-overload" +RDEPENDS:perl-module-bignum += "perl-module-strict" +RDEPENDS:perl-module-bignum += "perl-module-warnings" +RDEPENDS:perl-module-bigrat += "perl-module-constant" +RDEPENDS:perl-module-bigrat += "perl-module-exporter" +RDEPENDS:perl-module-bigrat += "perl-module-overload" +RDEPENDS:perl-module-bigrat += "perl-module-strict" +RDEPENDS:perl-module-bigrat += "perl-module-warnings" +RDEPENDS:perl-module-blib += "perl-module-cwd" +RDEPENDS:perl-module-b += "perl-module-exporter" +RDEPENDS:perl-module-b += "perl-module-xsloader" +RDEPENDS:perl-module-b-showlex += "perl-module-b" +RDEPENDS:perl-module-b-showlex += "perl-module-b-concise" +RDEPENDS:perl-module-b-showlex += "perl-module-b-terse" +RDEPENDS:perl-module-b-showlex += "perl-module-strict" +RDEPENDS:perl-module-b-terse += "perl-module-b" +RDEPENDS:perl-module-b-terse += "perl-module-b-concise" +RDEPENDS:perl-module-b-terse += "perl-module-strict" +RDEPENDS:perl-module-builtin += "perl-module-strict" +RDEPENDS:perl-module-builtin += "perl-module-warnings" +RDEPENDS:perl-module-b-xref += "perl-module-b" +RDEPENDS:perl-module-b-xref += "perl-module-config" +RDEPENDS:perl-module-b-xref += "perl-module-strict" +RDEPENDS:perl-module-bytes += "perl-module-bytes-heavy" +RDEPENDS:perl-module-bytes += "perl-module-strict" +RDEPENDS:perl-module-bytes += "perl-module-warnings" +RDEPENDS:perl-module--charnames += "perl-module-bytes" +RDEPENDS:perl-module-charnames += "perl-module-bytes" +RDEPENDS:perl-module-charnames += "perl-module--charnames" +RDEPENDS:perl-module--charnames += "perl-module-re" +RDEPENDS:perl-module-charnames += "perl-module-re" +RDEPENDS:perl-module--charnames += "perl-module-strict" +RDEPENDS:perl-module-charnames += "perl-module-strict" +RDEPENDS:perl-module--charnames += "perl-module-warnings" +RDEPENDS:perl-module-charnames += "perl-module-warnings" +RDEPENDS:perl-module-class-struct += "perl-module-exporter" +RDEPENDS:perl-module-class-struct += "perl-module-strict" +RDEPENDS:perl-module-class-struct += "perl-module-warnings-register" +RDEPENDS:perl-module-compress-raw-bzip2 += "perl-module-bytes " +RDEPENDS:perl-module-compress-raw-bzip2 += "perl-module-constant" +RDEPENDS:perl-module-compress-raw-bzip2 += "perl-module-dynaloader" +RDEPENDS:perl-module-compress-raw-bzip2 += "perl-module-exporter" +RDEPENDS:perl-module-compress-raw-bzip2 += "perl-module-strict " +RDEPENDS:perl-module-compress-raw-bzip2 += "perl-module-warnings " +RDEPENDS:perl-module-compress-raw-bzip2 += "perl-module-xsloader" +RDEPENDS:perl-module-compress-raw-zlib += "perl-module-bytes " +RDEPENDS:perl-module-compress-raw-zlib += "perl-module-constant" +RDEPENDS:perl-module-compress-raw-zlib += "perl-module-dynaloader" +RDEPENDS:perl-module-compress-raw-zlib += "perl-module-exporter" +RDEPENDS:perl-module-compress-raw-zlib += "perl-module-strict " +RDEPENDS:perl-module-compress-raw-zlib += "perl-module-warnings " +RDEPENDS:perl-module-compress-raw-zlib += "perl-module-xsloader" +RDEPENDS:perl-module-compress-zlib += "perl-module-bytes " +RDEPENDS:perl-module-compress-zlib += "perl-module-compress-raw-zlib" +RDEPENDS:perl-module-compress-zlib += "perl-module-constant" +RDEPENDS:perl-module-compress-zlib += "perl-module-exporter" +RDEPENDS:perl-module-compress-zlib += "perl-module-io-compress-base-common" +RDEPENDS:perl-module-compress-zlib += "perl-module-io-compress-gzip" +RDEPENDS:perl-module-compress-zlib += "perl-module-io-compress-gzip-constants" +RDEPENDS:perl-module-compress-zlib += "perl-module-io-handle " +RDEPENDS:perl-module-compress-zlib += "perl-module-io-uncompress-gunzip" +RDEPENDS:perl-module-compress-zlib += "perl-module-strict " +RDEPENDS:perl-module-compress-zlib += "perl-module-warnings " +RDEPENDS:perl-module-config-extensions += "perl-module-config" +RDEPENDS:perl-module-config-extensions += "perl-module-exporter" +RDEPENDS:perl-module-config-extensions += "perl-module-strict" +RDEPENDS:perl-module-config-perl-v += "perl-module-config" +RDEPENDS:perl-module-config-perl-v += "perl-module-exporter" +RDEPENDS:perl-module-config-perl-v += "perl-module-strict" +RDEPENDS:perl-module-config-perl-v += "perl-module-vars" +RDEPENDS:perl-module-config-perl-v += "perl-module-warnings" +RDEPENDS:perl-module-constant += "perl-module-strict" +RDEPENDS:perl-module-constant += "perl-module-warnings-register" +RDEPENDS:perl-module-corelist += "perl-module-list-util" +RDEPENDS:perl-module-corelist += "perl-module-corelist" +RDEPENDS:perl-module-corelist += "perl-module-strict" +RDEPENDS:perl-module-corelist += "perl-module-version" +RDEPENDS:perl-module-corelist += "perl-module-warnings" +RDEPENDS:perl-module-cpan += "perl-module-b" +RDEPENDS:perl-module-cpan += "perl-module-config" +RDEPENDS:perl-module-cpan += "perl-module-cwd" +RDEPENDS:perl-module-cpan += "perl-module-data-dumper" +RDEPENDS:perl-module-cpan += "perl-module-dirhandle" +RDEPENDS:perl-module-cpan += "perl-module-errno" +RDEPENDS:perl-module-cpan += "perl-module-exporter" +RDEPENDS:perl-module-cpan += "perl-module-extutils-makemaker" +RDEPENDS:perl-module-cpan += "perl-module-extutils-manifest" +RDEPENDS:perl-module-cpan += "perl-module-fcntl" +RDEPENDS:perl-module-cpan += "perl-module-file-basename" +RDEPENDS:perl-module-cpan += "perl-module-file-copy" +RDEPENDS:perl-module-cpan += "perl-module-file-find" +RDEPENDS:perl-module-cpan += "perl-module-filehandle" +RDEPENDS:perl-module-cpan += "perl-module-file-path" +RDEPENDS:perl-module-cpan += "perl-module-json-pp" +RDEPENDS:perl-module-cpan += "perl-module-lib" +RDEPENDS:perl-module-cpan += "perl-module-net-ping" +RDEPENDS:perl-module-cpan += "perl-module-overload" +RDEPENDS:perl-module-cpan += "perl-module-posix" +RDEPENDS:perl-module-cpan += "perl-module-safe" +RDEPENDS:perl-module-cpan += "perl-module-strict" +RDEPENDS:perl-module-cpan += "perl-module-sys-hostname" +RDEPENDS:perl-module-cpan += "perl-module-term-readline" +RDEPENDS:perl-module-cpan += "perl-module-text-parsewords" +RDEPENDS:perl-module-cpan += "perl-module-text-wrap" +RDEPENDS:perl-module-cpan += "perl-module-time-local" +RDEPENDS:perl-module-cpan += "perl-module-vars" +RDEPENDS:perl-module-cpan += "perl-module-warnings" +RDEPENDS:perl-module-cwd += "perl-module-errno" +RDEPENDS:perl-module-cwd += "perl-module-exporter" +RDEPENDS:perl-module-cwd += "perl-module-strict" +RDEPENDS:perl-module-cwd += "perl-module-xsloader" +RDEPENDS:perl-module-data-dumper += "perl-module-constant" +RDEPENDS:perl-module-data-dumper += "perl-module-exporter" +RDEPENDS:perl-module-data-dumper += "perl-module-strict" +RDEPENDS:perl-module-data-dumper += "perl-module-warnings" +RDEPENDS:perl-module-data-dumper += "perl-module-xsloader" +RDEPENDS:perl-module-dbm-filter-compress += "perl-module-strict" +RDEPENDS:perl-module-dbm-filter-compress += "perl-module-warnings" +RDEPENDS:perl-module-dbm-filter-encode += "perl-module-strict" +RDEPENDS:perl-module-dbm-filter-encode += "perl-module-warnings" +RDEPENDS:perl-module-dbm-filter-int32 += "perl-module-strict" +RDEPENDS:perl-module-dbm-filter-int32 += "perl-module-warnings" +RDEPENDS:perl-module-dbm-filter-null += "perl-module-strict" +RDEPENDS:perl-module-dbm-filter-null += "perl-module-warnings" +RDEPENDS:perl-module-dbm-filter += "perl-module-strict" +RDEPENDS:perl-module-dbm-filter += "perl-module-warnings" +RDEPENDS:perl-module-dbm-filter-utf8 += "perl-module-strict" +RDEPENDS:perl-module-dbm-filter-utf8 += "perl-module-warnings" +RDEPENDS:perl-module-db += "perl-module-strict" +RDEPENDS:perl-module-deprecate += "perl-module-strict" +RDEPENDS:perl-module-deprecate += "perl-module-warnings" +RDEPENDS:perl-module-devel-peek += "perl-module-exporter" +RDEPENDS:perl-module-devel-peek += "perl-module-xsloader" +RDEPENDS:perl-module-devel-ppport += "perl-module-file-find" +RDEPENDS:perl-module-devel-ppport += "perl-module-getopt-long" +RDEPENDS:perl-module-devel-ppport += "perl-module-strict" +RDEPENDS:perl-module-devel-ppport += "perl-module-vars" +RDEPENDS:perl-module-devel-selfstubber += "perl-module-selfloader" +RDEPENDS:perl-module-diagnostics += "perl-module-config" +RDEPENDS:perl-module-diagnostics += "perl-module-getopt-std" +RDEPENDS:perl-module-diagnostics += "perl-module-strict" +RDEPENDS:perl-module-diagnostics += "perl-module-text-tabs" +RDEPENDS:perl-module-digest-base += "perl-module-mime-base64" +RDEPENDS:perl-module-digest-base += "perl-module-strict" +RDEPENDS:perl-module-digest-base += "perl-module-warnings" +RDEPENDS:perl-module-digest-file += "perl-module-digest" +RDEPENDS:perl-module-digest-file += "perl-module-exporter" +RDEPENDS:perl-module-digest-file += "perl-module-strict" +RDEPENDS:perl-module-digest-file += "perl-module-warnings" +RDEPENDS:perl-module-digest-md5 += "perl-module-digest-base" +RDEPENDS:perl-module-digest-md5 += "perl-module-exporter" +RDEPENDS:perl-module-digest-md5 += "perl-module-strict" +RDEPENDS:perl-module-digest-md5 += "perl-module-warnings" +RDEPENDS:perl-module-digest-md5 += "perl-module-xsloader" +RDEPENDS:perl-module-digest += "perl-module-strict" +RDEPENDS:perl-module-digest += "perl-module-warnings" +RDEPENDS:perl-module-digest-sha += "perl-module-digest-base" +RDEPENDS:perl-module-digest-sha += "perl-module-dynaloader" +RDEPENDS:perl-module-digest-sha += "perl-module-exporter" +RDEPENDS:perl-module-digest-sha += "perl-module-fcntl" +RDEPENDS:perl-module-digest-sha += "perl-module-integer" +RDEPENDS:perl-module-digest-sha += "perl-module-strict" +RDEPENDS:perl-module-digest-sha += "perl-module-vars" +RDEPENDS:perl-module-digest-sha += "perl-module-warnings" +RDEPENDS:perl-module-digest-sha += "perl-module-xsloader" +RDEPENDS:perl-module-dynaloader += "perl-module-config" +RDEPENDS:perl-module-dynaloader += "perl-module-strict" +RDEPENDS:perl-module-dynaloader += "perl-module-vars" +RDEPENDS:perl-module-encode-alias += "perl-module-constant" +RDEPENDS:perl-module-encode-alias += "perl-module-encode" +RDEPENDS:perl-module-encode-alias += "perl-module-exporter" +RDEPENDS:perl-module-encode-alias += "perl-module-strict" +RDEPENDS:perl-module-encode-alias += "perl-module-warnings" +RDEPENDS:perl-module-encode-byte += "perl-module-encode" +RDEPENDS:perl-module-encode-byte += "perl-module-strict" +RDEPENDS:perl-module-encode-byte += "perl-module-warnings" +RDEPENDS:perl-module-encode-byte += "perl-module-xsloader" +RDEPENDS:perl-module-encode-cjkconstants += "perl-module-exporter" +RDEPENDS:perl-module-encode-cjkconstants += "perl-module-strict" +RDEPENDS:perl-module-encode-cjkconstants += "perl-module-warnings" +RDEPENDS:perl-module-encode-cn-hz += "perl-module-encode" +RDEPENDS:perl-module-encode-cn-hz += "perl-module-parent" +RDEPENDS:perl-module-encode-cn-hz += "perl-module-strict" +RDEPENDS:perl-module-encode-cn-hz += "perl-module-utf8" +RDEPENDS:perl-module-encode-cn-hz += "perl-module-vars" +RDEPENDS:perl-module-encode-cn-hz += "perl-module-warnings" +RDEPENDS:perl-module-encode-cn += "perl-module-encode" +RDEPENDS:perl-module-encode-cn += "perl-module-encode-cn-hz" +RDEPENDS:perl-module-encode-cn += "perl-module-strict" +RDEPENDS:perl-module-encode-cn += "perl-module-warnings" +RDEPENDS:perl-module-encode-cn += "perl-module-xsloader" +RDEPENDS:perl-module-encode-config += "perl-module-strict" +RDEPENDS:perl-module-encode-config += "perl-module-warnings" +RDEPENDS:perl-module-encode-ebcdic += "perl-module-encode" +RDEPENDS:perl-module-encode-ebcdic += "perl-module-strict" +RDEPENDS:perl-module-encode-ebcdic += "perl-module-warnings" +RDEPENDS:perl-module-encode-ebcdic += "perl-module-xsloader" +RDEPENDS:perl-module-encode-encoder += "perl-module-constant" +RDEPENDS:perl-module-encode-encoder += "perl-module-encode" +RDEPENDS:perl-module-encode-encoder += "perl-module-exporter" +RDEPENDS:perl-module-encode-encoder += "perl-module-overload" +RDEPENDS:perl-module-encode-encoder += "perl-module-strict" +RDEPENDS:perl-module-encode-encoder += "perl-module-warnings" +RDEPENDS:perl-module-encode-encoding += "perl-module-constant" +RDEPENDS:perl-module-encode-encoding += "perl-module-encode" +RDEPENDS:perl-module-encode-encoding += "perl-module-encode-mime-name" +RDEPENDS:perl-module-encode-encoding += "perl-module-strict" +RDEPENDS:perl-module-encode-encoding += "perl-module-warnings" +RDEPENDS:perl-module-encode-gsm0338 += "perl-module-encode" +RDEPENDS:perl-module-encode-gsm0338 += "perl-module-parent" +RDEPENDS:perl-module-encode-gsm0338 += "perl-module-strict" +RDEPENDS:perl-module-encode-gsm0338 += "perl-module-utf8" +RDEPENDS:perl-module-encode-gsm0338 += "perl-module-vars" +RDEPENDS:perl-module-encode-gsm0338 += "perl-module-warnings" +RDEPENDS:perl-module-encode-guess += "perl-module-bytes" +RDEPENDS:perl-module-encode-guess += "perl-module-constant" +RDEPENDS:perl-module-encode-guess += "perl-module-encode" +RDEPENDS:perl-module-encode-guess += "perl-module-encode-unicode" +RDEPENDS:perl-module-encode-guess += "perl-module-parent" +RDEPENDS:perl-module-encode-guess += "perl-module-strict" +RDEPENDS:perl-module-encode-guess += "perl-module-warnings" +RDEPENDS:perl-module-encode-jp-h2z += "perl-module-encode-cjkconstants" +RDEPENDS:perl-module-encode-jp-h2z += "perl-module-strict" +RDEPENDS:perl-module-encode-jp-h2z += "perl-module-vars" +RDEPENDS:perl-module-encode-jp-h2z += "perl-module-warnings" +RDEPENDS:perl-module-encode-jp-jis7 += "perl-module-bytes" +RDEPENDS:perl-module-encode-jp-jis7 += "perl-module-encode" +RDEPENDS:perl-module-encode-jp-jis7 += "perl-module-encode-cjkconstants" +RDEPENDS:perl-module-encode-jp-jis7 += "perl-module-encode-jp-h2z" +RDEPENDS:perl-module-encode-jp-jis7 += "perl-module-parent" +RDEPENDS:perl-module-encode-jp-jis7 += "perl-module-strict" +RDEPENDS:perl-module-encode-jp-jis7 += "perl-module-warnings" +RDEPENDS:perl-module-encode-jp += "perl-module-encode" +RDEPENDS:perl-module-encode-jp += "perl-module-encode-jp-jis7" +RDEPENDS:perl-module-encode-jp += "perl-module-strict" +RDEPENDS:perl-module-encode-jp += "perl-module-warnings" +RDEPENDS:perl-module-encode-jp += "perl-module-xsloader" +RDEPENDS:perl-module-encode-kr-2022-kr += "perl-module-encode" +RDEPENDS:perl-module-encode-kr-2022-kr += "perl-module-encode-cjkconstants" +RDEPENDS:perl-module-encode-kr-2022-kr += "perl-module-parent" +RDEPENDS:perl-module-encode-kr-2022-kr += "perl-module-strict" +RDEPENDS:perl-module-encode-kr-2022-kr += "perl-module-warnings" +RDEPENDS:perl-module-encode-kr += "perl-module-encode" +RDEPENDS:perl-module-encode-kr += "perl-module-encode-kr-2022-kr" +RDEPENDS:perl-module-encode-kr += "perl-module-strict" +RDEPENDS:perl-module-encode-kr += "perl-module-warnings" +RDEPENDS:perl-module-encode-kr += "perl-module-xsloader" +RDEPENDS:perl-module-encode-mime-header-iso-2022-jp += "perl-module-constant" +RDEPENDS:perl-module-encode-mime-header-iso-2022-jp += "perl-module-encode-cjkconstants" +RDEPENDS:perl-module-encode-mime-header-iso-2022-jp += "perl-module-parent" +RDEPENDS:perl-module-encode-mime-header-iso-2022-jp += "perl-module-strict" +RDEPENDS:perl-module-encode-mime-header-iso-2022-jp += "perl-module-warnings" +RDEPENDS:perl-module-encode-mime-header += "perl-module-encode" +RDEPENDS:perl-module-encode-mime-header += "perl-module-mime-base64" +RDEPENDS:perl-module-encode-mime-header += "perl-module-parent" +RDEPENDS:perl-module-encode-mime-header += "perl-module-strict" +RDEPENDS:perl-module-encode-mime-header += "perl-module-warnings" +RDEPENDS:perl-module-encode-mime-name += "perl-module-strict" +RDEPENDS:perl-module-encode-mime-name += "perl-module-warnings" +RDEPENDS:perl-module-encode += "perl-module-bytes" +RDEPENDS:perl-module-encode += "perl-module-constant" +RDEPENDS:perl-module-encode += "perl-module-encode-alias" +RDEPENDS:perl-module-encode += "perl-module-encode-config" +RDEPENDS:perl-module-encode += "perl-module-encode-configlocal-pm" +RDEPENDS:perl-module-encode += "perl-module-encode-mime-name" +RDEPENDS:perl-module-encode += "perl-module-exporter" +RDEPENDS:perl-module-encode += "perl-module-parent" +RDEPENDS:perl-module-encode += "perl-module-storable" +RDEPENDS:perl-module-encode += "perl-module-strict" +RDEPENDS:perl-module-encode += "perl-module-warnings" +RDEPENDS:perl-module-encode += "perl-module-xsloader" +RDEPENDS:perl-module-encode-symbol += "perl-module-encode" +RDEPENDS:perl-module-encode-symbol += "perl-module-strict" +RDEPENDS:perl-module-encode-symbol += "perl-module-warnings" +RDEPENDS:perl-module-encode-symbol += "perl-module-xsloader" +RDEPENDS:perl-module-encode-tw += "perl-module-encode" +RDEPENDS:perl-module-encode-tw += "perl-module-strict" +RDEPENDS:perl-module-encode-tw += "perl-module-warnings" +RDEPENDS:perl-module-encode-tw += "perl-module-xsloader" +RDEPENDS:perl-module-encode-unicode += "perl-module-encode" +RDEPENDS:perl-module-encode-unicode += "perl-module-parent" +RDEPENDS:perl-module-encode-unicode += "perl-module-strict" +RDEPENDS:perl-module-encode-unicode += "perl-module-warnings" +RDEPENDS:perl-module-encode-unicode += "perl-module-xsloader" +RDEPENDS:perl-module-encode-unicode-utf7 += "perl-module-encode" +RDEPENDS:perl-module-encode-unicode-utf7 += "perl-module-mime-base64" +RDEPENDS:perl-module-encode-unicode-utf7 += "perl-module-parent" +RDEPENDS:perl-module-encode-unicode-utf7 += "perl-module-re" +RDEPENDS:perl-module-encode-unicode-utf7 += "perl-module-strict" +RDEPENDS:perl-module-encode-unicode-utf7 += "perl-module-warnings" +RDEPENDS:perl-module-encoding += "perl-module-config" +RDEPENDS:perl-module-encoding += "perl-module-constant" +RDEPENDS:perl-module-encoding += "perl-module-encode" +RDEPENDS:perl-module-encoding += "perl-module-filter-util-call" +RDEPENDS:perl-module-encoding += "perl-module-i18n-langinfo" +RDEPENDS:perl-module-encoding += "perl-module-posix" +RDEPENDS:perl-module-encoding += "perl-module-strict" +RDEPENDS:perl-module-encoding += "perl-module-utf8" +RDEPENDS:perl-module-encoding += "perl-module-warnings" +RDEPENDS:perl-module-encoding-warnings += "perl-module-strict" +RDEPENDS:perl-module-encoding-warnings += "perl-module-warnings" +RDEPENDS:perl-module-english += "perl-module-exporter" +RDEPENDS:perl-module-env += "perl-module-config" +RDEPENDS:perl-module-env += "perl-module-tie-array" +RDEPENDS:perl-module-errno += "perl-module-exporter" +RDEPENDS:perl-module-errno += "perl-module-strict" +RDEPENDS:perl-module-experimental += "perl-module-strict" +RDEPENDS:perl-module-experimental += "perl-module-version" +RDEPENDS:perl-module-experimental += "perl-module-warnings" +RDEPENDS:perl-module-exporter-heavy += "perl-module-strict" +RDEPENDS:perl-module-exporter += "perl-module-exporter-heavy" +RDEPENDS:perl-module-exporter += "perl-module-strict" +RDEPENDS:perl-module-extutils-cbuilder-base += "perl-module-config" +RDEPENDS:perl-module-extutils-cbuilder-base += "perl-module-cwd" +RDEPENDS:perl-module-extutils-cbuilder-base += "perl-module-dynaloader" +RDEPENDS:perl-module-extutils-cbuilder-base += "perl-module-extutils-mksymlists" +RDEPENDS:perl-module-extutils-cbuilder-base += "perl-module-file-basename" +RDEPENDS:perl-module-extutils-cbuilder-base += "perl-module-file-temp" +RDEPENDS:perl-module-extutils-cbuilder-base += "perl-module-ipc-cmd" +RDEPENDS:perl-module-extutils-cbuilder-base += "perl-module-strict" +RDEPENDS:perl-module-extutils-cbuilder-base += "perl-module-text-parsewords" +RDEPENDS:perl-module-extutils-cbuilder-base += "perl-module-warnings" +RDEPENDS:perl-module-extutils-cbuilder += "perl-module-file-basename" +RDEPENDS:perl-module-extutils-cbuilder += "perl-module-file-path" +RDEPENDS:perl-module-extutils-cbuilder += "perl-module-strict" +RDEPENDS:perl-module-extutils-cbuilder += "perl-module-warnings" +RDEPENDS:perl-module-extutils-cbuilder-platform-aix += "perl-module-extutils-cbuilder-platform-unix" +RDEPENDS:perl-module-extutils-cbuilder-platform-aix += "perl-module-strict" +RDEPENDS:perl-module-extutils-cbuilder-platform-aix += "perl-module-warnings" +RDEPENDS:perl-module-extutils-cbuilder-platform-android += "perl-module-config" +RDEPENDS:perl-module-extutils-cbuilder-platform-android += "perl-module-extutils-cbuilder-platform-unix" +RDEPENDS:perl-module-extutils-cbuilder-platform-android += "perl-module-strict" +RDEPENDS:perl-module-extutils-cbuilder-platform-android += "perl-module-warnings" +RDEPENDS:perl-module-extutils-cbuilder-platform-cygwin += "perl-module-extutils-cbuilder-platform-unix" +RDEPENDS:perl-module-extutils-cbuilder-platform-cygwin += "perl-module-strict" +RDEPENDS:perl-module-extutils-cbuilder-platform-cygwin += "perl-module-warnings" +RDEPENDS:perl-module-extutils-cbuilder-platform-darwin += "perl-module-extutils-cbuilder-platform-unix" +RDEPENDS:perl-module-extutils-cbuilder-platform-darwin += "perl-module-strict" +RDEPENDS:perl-module-extutils-cbuilder-platform-darwin += "perl-module-warnings" +RDEPENDS:perl-module-extutils-cbuilder-platform-dec-osf += "perl-module-extutils-cbuilder-platform-unix" +RDEPENDS:perl-module-extutils-cbuilder-platform-dec-osf += "perl-module-strict" +RDEPENDS:perl-module-extutils-cbuilder-platform-dec-osf += "perl-module-warnings" +RDEPENDS:perl-module-extutils-cbuilder-platform-os2 += "perl-module-extutils-cbuilder-platform-unix" +RDEPENDS:perl-module-extutils-cbuilder-platform-os2 += "perl-module-strict" +RDEPENDS:perl-module-extutils-cbuilder-platform-os2 += "perl-module-warnings" +RDEPENDS:perl-module-extutils-cbuilder-platform-unix += "perl-module-extutils-cbuilder-base" +RDEPENDS:perl-module-extutils-cbuilder-platform-unix += "perl-module-strict" +RDEPENDS:perl-module-extutils-cbuilder-platform-unix += "perl-module-warnings" +RDEPENDS:perl-module-extutils-cbuilder-platform-vms += "perl-module-config" +RDEPENDS:perl-module-extutils-cbuilder-platform-vms += "perl-module-extutils-cbuilder-base" +RDEPENDS:perl-module-extutils-cbuilder-platform-vms += "perl-module-strict" +RDEPENDS:perl-module-extutils-cbuilder-platform-vms += "perl-module-warnings" +RDEPENDS:perl-module-extutils-cbuilder-platform-windows-bcc += "perl-module-strict" +RDEPENDS:perl-module-extutils-cbuilder-platform-windows-bcc += "perl-module-warnings" +RDEPENDS:perl-module-extutils-cbuilder-platform-windows-gcc += "perl-module-strict" +RDEPENDS:perl-module-extutils-cbuilder-platform-windows-gcc += "perl-module-warnings" +RDEPENDS:perl-module-extutils-cbuilder-platform-windows-msvc += "perl-module-strict" +RDEPENDS:perl-module-extutils-cbuilder-platform-windows-msvc += "perl-module-warnings" +RDEPENDS:perl-module-extutils-cbuilder-platform-windows += "perl-module-extutils-cbuilder-base" +RDEPENDS:perl-module-extutils-cbuilder-platform-windows += "perl-module-file-basename" +RDEPENDS:perl-module-extutils-cbuilder-platform-windows += "perl-module-io-file" +RDEPENDS:perl-module-extutils-cbuilder-platform-windows += "perl-module-strict" +RDEPENDS:perl-module-extutils-cbuilder-platform-windows += "perl-module-warnings" +RDEPENDS:perl-module-extutils-command-mm += "perl-module-exporter" +RDEPENDS:perl-module-extutils-command-mm += "perl-module-extutils-command" +RDEPENDS:perl-module-extutils-command-mm += "perl-module-extutils-install" +RDEPENDS:perl-module-extutils-command-mm += "perl-module-getopt-long" +RDEPENDS:perl-module-extutils-command-mm += "perl-module-strict" +RDEPENDS:perl-module-extutils-command-mm += "perl-module-test-harness" +RDEPENDS:perl-module-extutils-command-mm += "perl-module-warnings" +RDEPENDS:perl-module-extutils-command += "perl-module-exporter" +RDEPENDS:perl-module-extutils-command += "perl-module-file-copy" +RDEPENDS:perl-module-extutils-command += "perl-module-file-find" +RDEPENDS:perl-module-extutils-command += "perl-module-file-path" +RDEPENDS:perl-module-extutils-command += "perl-module-strict" +RDEPENDS:perl-module-extutils-command += "perl-module-vars" +RDEPENDS:perl-module-extutils-command += "perl-module-warnings" +RDEPENDS:perl-module-extutils-constant-base += "perl-module-constant" +RDEPENDS:perl-module-extutils-constant-base += "perl-module-extutils-constant-utils" +RDEPENDS:perl-module-extutils-constant-base += "perl-module-strict" +RDEPENDS:perl-module-extutils-constant-base += "perl-module-text-wrap" +RDEPENDS:perl-module-extutils-constant-base += "perl-module-vars" +RDEPENDS:perl-module-extutils-constant += "perl-module-exporter" +RDEPENDS:perl-module-extutils-constant += "perl-module-extutils-constant-proxysubs" +RDEPENDS:perl-module-extutils-constant += "perl-module-extutils-constant-utils" +RDEPENDS:perl-module-extutils-constant += "perl-module-extutils-constant-xs" +RDEPENDS:perl-module-extutils-constant += "perl-module-filehandle" +RDEPENDS:perl-module-extutils-constant += "perl-module-strict" +RDEPENDS:perl-module-extutils-constant += "perl-module-vars" +RDEPENDS:perl-module-extutils-constant-proxysubs += "perl-module-extutils-constant-utils" +RDEPENDS:perl-module-extutils-constant-proxysubs += "perl-module-extutils-constant-xs" +RDEPENDS:perl-module-extutils-constant-proxysubs += "perl-module-strict" +RDEPENDS:perl-module-extutils-constant-proxysubs += "perl-module-vars" +RDEPENDS:perl-module-extutils-constant-utils += "perl-module-constant" +RDEPENDS:perl-module-extutils-constant-utils += "perl-module-posix" +RDEPENDS:perl-module-extutils-constant-utils += "perl-module-strict" +RDEPENDS:perl-module-extutils-constant-utils += "perl-module-vars" +RDEPENDS:perl-module-extutils-constant-xs += "perl-module-data-dumper" +RDEPENDS:perl-module-extutils-constant-xs += "perl-module-extutils-constant" +RDEPENDS:perl-module-extutils-constant-xs += "perl-module-extutils-constant-base" +RDEPENDS:perl-module-extutils-constant-xs += "perl-module-extutils-constant-utils" +RDEPENDS:perl-module-extutils-constant-xs += "perl-module-strict" +RDEPENDS:perl-module-extutils-constant-xs += "perl-module-vars" +RDEPENDS:perl-module-extutils-embed += "perl-module-config" +RDEPENDS:perl-module-extutils-embed += "perl-module-exporter" +RDEPENDS:perl-module-extutils-embed += "perl-module-extutils-liblist" +RDEPENDS:perl-module-extutils-embed += "perl-module-extutils-makemaker" +RDEPENDS:perl-module-extutils-embed += "perl-module-getopt-std" +RDEPENDS:perl-module-extutils-embed += "perl-module-strict" +RDEPENDS:perl-module-extutils-installed += "perl-module-config" +RDEPENDS:perl-module-extutils-installed += "perl-module-data-dumper" +RDEPENDS:perl-module-extutils-installed += "perl-module-extutils-makemaker" +RDEPENDS:perl-module-extutils-installed += "perl-module-extutils-packlist" +RDEPENDS:perl-module-extutils-installed += "perl-module-file-basename" +RDEPENDS:perl-module-extutils-installed += "perl-module-file-find" +RDEPENDS:perl-module-extutils-installed += "perl-module-strict" +RDEPENDS:perl-module-extutils-install += "perl-module-autosplit" +RDEPENDS:perl-module-extutils-install += "perl-module-config" +RDEPENDS:perl-module-extutils-install += "perl-module-cwd" +RDEPENDS:perl-module-extutils-install += "perl-module-exporter" +RDEPENDS:perl-module-extutils-install += "perl-module-extutils-packlist" +RDEPENDS:perl-module-extutils-install += "perl-module-file-basename" +RDEPENDS:perl-module-extutils-install += "perl-module-file-compare" +RDEPENDS:perl-module-extutils-install += "perl-module-file-copy" +RDEPENDS:perl-module-extutils-install += "perl-module-file-find" +RDEPENDS:perl-module-extutils-install += "perl-module-file-path" +RDEPENDS:perl-module-extutils-install += "perl-module-strict" +RDEPENDS:perl-module-extutils-liblist-kid += "perl-module-cwd" +RDEPENDS:perl-module-extutils-liblist-kid += "perl-module-extutils-makemaker-config" +RDEPENDS:perl-module-extutils-liblist-kid += "perl-module-file-basename" +RDEPENDS:perl-module-extutils-liblist-kid += "perl-module-strict" +RDEPENDS:perl-module-extutils-liblist-kid += "perl-module-text-parsewords" +RDEPENDS:perl-module-extutils-liblist-kid += "perl-module-warnings" +RDEPENDS:perl-module-extutils-liblist += "perl-module-extutils-liblist-kid" +RDEPENDS:perl-module-extutils-liblist += "perl-module-strict" +RDEPENDS:perl-module-extutils-liblist += "perl-module-warnings" +RDEPENDS:perl-module-extutils-makemaker-config += "perl-module-config" +RDEPENDS:perl-module-extutils-makemaker-config += "perl-module-strict" +RDEPENDS:perl-module-extutils-makemaker-config += "perl-module-warnings" +RDEPENDS:perl-module-extutils-makemaker-locale += "perl-module-base" +RDEPENDS:perl-module-extutils-makemaker-locale += "perl-module-encode" +RDEPENDS:perl-module-extutils-makemaker-locale += "perl-module-encode-alias" +RDEPENDS:perl-module-extutils-makemaker-locale += "perl-module-i18n-langinfo" +RDEPENDS:perl-module-extutils-makemaker-locale += "perl-module-strict" +RDEPENDS:perl-module-extutils-makemaker-locale += "perl-module-warnings" +RDEPENDS:perl-module-extutils-makemaker += "perl-module-b" +RDEPENDS:perl-module-extutils-makemaker += "perl-module-cpan" +RDEPENDS:perl-module-extutils-makemaker += "perl-module-cwd" +RDEPENDS:perl-module-extutils-makemaker += "perl-module-exporter" +RDEPENDS:perl-module-extutils-makemaker += "perl-module-extutils-makemaker-config" +RDEPENDS:perl-module-extutils-makemaker += "perl-module-extutils-makemaker-version" +RDEPENDS:perl-module-extutils-makemaker += "perl-module-extutils-manifest" +RDEPENDS:perl-module-extutils-makemaker += "perl-module-extutils-mm" +RDEPENDS:perl-module-extutils-makemaker += "perl-module-extutils-my" +RDEPENDS:perl-module-extutils-makemaker += "perl-module-file-path" +RDEPENDS:perl-module-extutils-makemaker += "perl-module-strict" +RDEPENDS:perl-module-extutils-makemaker += "perl-module-version" +RDEPENDS:perl-module-extutils-makemaker += "perl-module-warnings" +RDEPENDS:perl-module-extutils-makemaker-version += "perl-module-strict" +RDEPENDS:perl-module-extutils-makemaker-version += "perl-module-vars" +RDEPENDS:perl-module-extutils-makemaker-version += "perl-module-warnings" +RDEPENDS:perl-module-extutils-manifest += "perl-module-config" +RDEPENDS:perl-module-extutils-manifest += "perl-module-exporter" +RDEPENDS:perl-module-extutils-manifest += "perl-module-file-basename" +RDEPENDS:perl-module-extutils-manifest += "perl-module-file-copy" +RDEPENDS:perl-module-extutils-manifest += "perl-module-file-find" +RDEPENDS:perl-module-extutils-manifest += "perl-module-file-path" +RDEPENDS:perl-module-extutils-manifest += "perl-module-strict" +RDEPENDS:perl-module-extutils-manifest += "perl-module-warnings" +RDEPENDS:perl-module-extutils-miniperl += "perl-module-exporter" +RDEPENDS:perl-module-extutils-miniperl += "perl-module-extutils-embed" +RDEPENDS:perl-module-extutils-miniperl += "perl-module-strict" +RDEPENDS:perl-module-extutils-mkbootstrap += "perl-module-config" +RDEPENDS:perl-module-extutils-mkbootstrap += "perl-module-dynaloader" +RDEPENDS:perl-module-extutils-mkbootstrap += "perl-module-exporter" +RDEPENDS:perl-module-extutils-mkbootstrap += "perl-module-strict" +RDEPENDS:perl-module-extutils-mkbootstrap += "perl-module-warnings" +RDEPENDS:perl-module-extutils-mksymlists += "perl-module-config" +RDEPENDS:perl-module-extutils-mksymlists += "perl-module-exporter" +RDEPENDS:perl-module-extutils-mksymlists += "perl-module-strict" +RDEPENDS:perl-module-extutils-mksymlists += "perl-module-warnings" +RDEPENDS:perl-module-extutils-mm-aix += "perl-module-extutils-makemaker-config" +RDEPENDS:perl-module-extutils-mm-aix += "perl-module-extutils-mm-unix" +RDEPENDS:perl-module-extutils-mm-aix += "perl-module-strict" +RDEPENDS:perl-module-extutils-mm-aix += "perl-module-warnings" +RDEPENDS:perl-module-extutils-mm-any += "perl-module-autosplit" +RDEPENDS:perl-module-extutils-mm-any += "perl-module-cpan" +RDEPENDS:perl-module-extutils-mm-any += "perl-module-data-dumper" +RDEPENDS:perl-module-extutils-mm-any += "perl-module-extutils-makemaker" +RDEPENDS:perl-module-extutils-mm-any += "perl-module-extutils-makemaker-config" +RDEPENDS:perl-module-extutils-mm-any += "perl-module-file-basename" +RDEPENDS:perl-module-extutils-mm-any += "perl-module-file-find" +RDEPENDS:perl-module-extutils-mm-any += "perl-module-strict" +RDEPENDS:perl-module-extutils-mm-any += "perl-module-version" +RDEPENDS:perl-module-extutils-mm-any += "perl-module-warnings" +RDEPENDS:perl-module-extutils-mm-beos += "perl-module-extutils-makemaker-config" +RDEPENDS:perl-module-extutils-mm-beos += "perl-module-extutils-mm-any" +RDEPENDS:perl-module-extutils-mm-beos += "perl-module-extutils-mm-unix" +RDEPENDS:perl-module-extutils-mm-beos += "perl-module-strict" +RDEPENDS:perl-module-extutils-mm-beos += "perl-module-warnings" +RDEPENDS:perl-module-extutils-mm-cygwin += "perl-module-extutils-makemaker-config" +RDEPENDS:perl-module-extutils-mm-cygwin += "perl-module-extutils-mm-unix" +RDEPENDS:perl-module-extutils-mm-cygwin += "perl-module-extutils-mm-win32" +RDEPENDS:perl-module-extutils-mm-cygwin += "perl-module-strict" +RDEPENDS:perl-module-extutils-mm-cygwin += "perl-module-warnings" +RDEPENDS:perl-module-extutils-mm-darwin += "perl-module-extutils-mm-unix" +RDEPENDS:perl-module-extutils-mm-darwin += "perl-module-strict" +RDEPENDS:perl-module-extutils-mm-darwin += "perl-module-warnings" +RDEPENDS:perl-module-extutils-mm-dos += "perl-module-extutils-mm-any" +RDEPENDS:perl-module-extutils-mm-dos += "perl-module-extutils-mm-unix" +RDEPENDS:perl-module-extutils-mm-dos += "perl-module-strict" +RDEPENDS:perl-module-extutils-mm-dos += "perl-module-warnings" +RDEPENDS:perl-module-extutils-mm-macos += "perl-module-strict" +RDEPENDS:perl-module-extutils-mm-macos += "perl-module-warnings" +RDEPENDS:perl-module-extutils-mm-nw5 += "perl-module-extutils-makemaker" +RDEPENDS:perl-module-extutils-mm-nw5 += "perl-module-extutils-makemaker-config" +RDEPENDS:perl-module-extutils-mm-nw5 += "perl-module-extutils-mm-win32" +RDEPENDS:perl-module-extutils-mm-nw5 += "perl-module-file-basename" +RDEPENDS:perl-module-extutils-mm-nw5 += "perl-module-strict" +RDEPENDS:perl-module-extutils-mm-nw5 += "perl-module-warnings" +RDEPENDS:perl-module-extutils-mm-os2 += "perl-module-extutils-makemaker" +RDEPENDS:perl-module-extutils-mm-os2 += "perl-module-extutils-mm-any" +RDEPENDS:perl-module-extutils-mm-os2 += "perl-module-extutils-mm-unix" +RDEPENDS:perl-module-extutils-mm-os2 += "perl-module-strict" +RDEPENDS:perl-module-extutils-mm-os2 += "perl-module-warnings" +RDEPENDS:perl-module-extutils-mm-os390 += "perl-module-extutils-makemaker-config" +RDEPENDS:perl-module-extutils-mm-os390 += "perl-module-extutils-mm-unix" +RDEPENDS:perl-module-extutils-mm-os390 += "perl-module-strict" +RDEPENDS:perl-module-extutils-mm-os390 += "perl-module-warnings" +RDEPENDS:perl-module-extutils-mm += "perl-module-extutils-liblist" +RDEPENDS:perl-module-extutils-mm += "perl-module-extutils-makemaker" +RDEPENDS:perl-module-extutils-mm += "perl-module-extutils-makemaker-config" +RDEPENDS:perl-module-extutils-mm += "perl-module-strict" +RDEPENDS:perl-module-extutils-mm += "perl-module-warnings" +RDEPENDS:perl-module-extutils-mm-qnx += "perl-module-extutils-mm-unix" +RDEPENDS:perl-module-extutils-mm-qnx += "perl-module-strict" +RDEPENDS:perl-module-extutils-mm-qnx += "perl-module-warnings" +RDEPENDS:perl-module-extutils-mm-unix += "perl-module-cwd" +RDEPENDS:perl-module-extutils-mm-unix += "perl-module-encode" +RDEPENDS:perl-module-extutils-mm-unix += "perl-module-extutils-liblist" +RDEPENDS:perl-module-extutils-mm-unix += "perl-module-extutils-makemaker" +RDEPENDS:perl-module-extutils-mm-unix += "perl-module-extutils-makemaker-config" +RDEPENDS:perl-module-extutils-mm-unix += "perl-module-extutils-mm-any" +RDEPENDS:perl-module-extutils-mm-unix += "perl-module-file-basename" +RDEPENDS:perl-module-extutils-mm-unix += "perl-module-file-find" +RDEPENDS:perl-module-extutils-mm-unix += "perl-module-strict" +RDEPENDS:perl-module-extutils-mm-unix += "perl-module-vars" +RDEPENDS:perl-module-extutils-mm-unix += "perl-module-version" +RDEPENDS:perl-module-extutils-mm-unix += "perl-module-warnings" +RDEPENDS:perl-module-extutils-mm-uwin += "perl-module-extutils-mm-unix" +RDEPENDS:perl-module-extutils-mm-uwin += "perl-module-strict" +RDEPENDS:perl-module-extutils-mm-uwin += "perl-module-warnings" +RDEPENDS:perl-module-extutils-mm-vms += "perl-module-exporter" +RDEPENDS:perl-module-extutils-mm-vms += "perl-module-extutils-liblist-kid" +RDEPENDS:perl-module-extutils-mm-vms += "perl-module-extutils-makemaker" +RDEPENDS:perl-module-extutils-mm-vms += "perl-module-extutils-makemaker-config" +RDEPENDS:perl-module-extutils-mm-vms += "perl-module-extutils-mm-any" +RDEPENDS:perl-module-extutils-mm-vms += "perl-module-extutils-mm-unix" +RDEPENDS:perl-module-extutils-mm-vms += "perl-module-file-basename" +RDEPENDS:perl-module-extutils-mm-vms += "perl-module-file-find" +RDEPENDS:perl-module-extutils-mm-vms += "perl-module-strict" +RDEPENDS:perl-module-extutils-mm-vms += "perl-module-warnings" +RDEPENDS:perl-module-extutils-mm-vos += "perl-module-extutils-mm-unix" +RDEPENDS:perl-module-extutils-mm-vos += "perl-module-strict" +RDEPENDS:perl-module-extutils-mm-vos += "perl-module-warnings" +RDEPENDS:perl-module-extutils-mm-win32 += "perl-module-extutils-makemaker" +RDEPENDS:perl-module-extutils-mm-win32 += "perl-module-extutils-makemaker-config" +RDEPENDS:perl-module-extutils-mm-win32 += "perl-module-extutils-mm-any" +RDEPENDS:perl-module-extutils-mm-win32 += "perl-module-extutils-mm-unix" +RDEPENDS:perl-module-extutils-mm-win32 += "perl-module-file-basename" +RDEPENDS:perl-module-extutils-mm-win32 += "perl-module-strict" +RDEPENDS:perl-module-extutils-mm-win32 += "perl-module-warnings" +RDEPENDS:perl-module-extutils-mm-win95 += "perl-module-extutils-makemaker-config" +RDEPENDS:perl-module-extutils-mm-win95 += "perl-module-extutils-mm-win32" +RDEPENDS:perl-module-extutils-mm-win95 += "perl-module-strict" +RDEPENDS:perl-module-extutils-mm-win95 += "perl-module-warnings" +RDEPENDS:perl-module-extutils-my += "perl-module-extutils-mm" +RDEPENDS:perl-module-extutils-my += "perl-module-strict" +RDEPENDS:perl-module-extutils-packlist += "perl-module-config" +RDEPENDS:perl-module-extutils-packlist += "perl-module-cwd" +RDEPENDS:perl-module-extutils-packlist += "perl-module-strict" +RDEPENDS:perl-module-extutils-parsexs-constants += "perl-module-strict" +RDEPENDS:perl-module-extutils-parsexs-constants += "perl-module-warnings" +RDEPENDS:perl-module-extutils-parsexs-countlines += "perl-module-strict" +RDEPENDS:perl-module-extutils-parsexs-eval += "perl-module-strict" +RDEPENDS:perl-module-extutils-parsexs-eval += "perl-module-warnings" +RDEPENDS:perl-module-extutils-parsexs += "perl-module-config" +RDEPENDS:perl-module-extutils-parsexs += "perl-module-cwd" +RDEPENDS:perl-module-extutils-parsexs += "perl-module-exporter" +RDEPENDS:perl-module-extutils-parsexs += "perl-module-extutils-parsexs-constants" +RDEPENDS:perl-module-extutils-parsexs += "perl-module-extutils-parsexs-countlines" +RDEPENDS:perl-module-extutils-parsexs += "perl-module-extutils-parsexs-eval" +RDEPENDS:perl-module-extutils-parsexs += "perl-module-extutils-parsexs-utilities" +RDEPENDS:perl-module-extutils-parsexs += "perl-module-file-basename" +RDEPENDS:perl-module-extutils-parsexs += "perl-module-re" +RDEPENDS:perl-module-extutils-parsexs += "perl-module-strict" +RDEPENDS:perl-module-extutils-parsexs-utilities += "perl-module-exporter" +RDEPENDS:perl-module-extutils-parsexs-utilities += "perl-module-extutils-parsexs-constants" +RDEPENDS:perl-module-extutils-parsexs-utilities += "perl-module-extutils-typemaps" +RDEPENDS:perl-module-extutils-parsexs-utilities += "perl-module-strict" +RDEPENDS:perl-module-extutils-parsexs-utilities += "perl-module-warnings" +RDEPENDS:perl-module-extutils-pl2bat += "perl-module-config" +RDEPENDS:perl-module-extutils-pl2bat += "perl-module-strict" +RDEPENDS:perl-module-extutils-pl2bat += "perl-module-warnings" +RDEPENDS:perl-module-extutils-testlib += "perl-module-cwd" +RDEPENDS:perl-module-extutils-testlib += "perl-module-lib" +RDEPENDS:perl-module-extutils-testlib += "perl-module-strict" +RDEPENDS:perl-module-extutils-testlib += "perl-module-warnings" +RDEPENDS:perl-module-extutils-typemaps-cmd += "perl-module-exporter" +RDEPENDS:perl-module-extutils-typemaps-cmd += "perl-module-extutils-typemaps" +RDEPENDS:perl-module-extutils-typemaps-cmd += "perl-module-strict" +RDEPENDS:perl-module-extutils-typemaps-cmd += "perl-module-warnings" +RDEPENDS:perl-module-extutils-typemaps-inputmap += "perl-module-strict" +RDEPENDS:perl-module-extutils-typemaps-inputmap += "perl-module-warnings" +RDEPENDS:perl-module-extutils-typemaps-outputmap += "perl-module-re" +RDEPENDS:perl-module-extutils-typemaps-outputmap += "perl-module-strict" +RDEPENDS:perl-module-extutils-typemaps-outputmap += "perl-module-warnings" +RDEPENDS:perl-module-extutils-typemaps += "perl-module-extutils-parsexs" +RDEPENDS:perl-module-extutils-typemaps += "perl-module-extutils-parsexs-constants" +RDEPENDS:perl-module-extutils-typemaps += "perl-module-extutils-typemaps-inputmap" +RDEPENDS:perl-module-extutils-typemaps += "perl-module-extutils-typemaps-outputmap" +RDEPENDS:perl-module-extutils-typemaps += "perl-module-extutils-typemaps-type" +RDEPENDS:perl-module-extutils-typemaps += "perl-module-strict" +RDEPENDS:perl-module-extutils-typemaps += "perl-module-warnings" +RDEPENDS:perl-module-extutils-typemaps-type += "perl-module-extutils-typemaps" +RDEPENDS:perl-module-extutils-typemaps-type += "perl-module-strict" +RDEPENDS:perl-module-extutils-typemaps-type += "perl-module-warnings" +RDEPENDS:perl-module-fatal += "perl-module-autodie" +RDEPENDS:perl-module-fatal += "perl-module-autodie-exception-system" +RDEPENDS:perl-module-fatal += "perl-module-autodie-hints" +RDEPENDS:perl-module-fatal += "perl-module-autodie-util" +RDEPENDS:perl-module-fatal += "perl-module-config" +RDEPENDS:perl-module-fatal += "perl-module-constant" +RDEPENDS:perl-module-fatal += "perl-module-fcntl" +RDEPENDS:perl-module-fatal += "perl-module-posix" +RDEPENDS:perl-module-fatal += "perl-module-strict" +RDEPENDS:perl-module-fatal += "perl-module-tie-refhash" +RDEPENDS:perl-module-fatal += "perl-module-warnings" +RDEPENDS:perl-module-fcntl += "perl-module-exporter" +RDEPENDS:perl-module-fcntl += "perl-module-strict" +RDEPENDS:perl-module-fcntl += "perl-module-xsloader" +RDEPENDS:perl-module-fields += "perl-module-base" +RDEPENDS:perl-module-fields += "perl-module-hash-util" +RDEPENDS:perl-module-fields += "perl-module-strict" +RDEPENDS:perl-module-file-basename += "perl-module-exporter" +RDEPENDS:perl-module-file-basename += "perl-module-re" +RDEPENDS:perl-module-file-basename += "perl-module-strict" +RDEPENDS:perl-module-file-basename += "perl-module-warnings" +RDEPENDS:perl-module-filecache += "perl-module-parent" +RDEPENDS:perl-module-filecache += "perl-module-strict" +RDEPENDS:perl-module-file-compare += "perl-module-exporter" +RDEPENDS:perl-module-file-compare += "perl-module-warnings" +RDEPENDS:perl-module-file-copy += "perl-module-builtin" +RDEPENDS:perl-module-file-copy += "perl-module-config" +RDEPENDS:perl-module-file-copy += "perl-module-exporter" +RDEPENDS:perl-module-file-copy += "perl-module-file-basename" +RDEPENDS:perl-module-file-copy += "perl-module-overload" +RDEPENDS:perl-module-file-copy += "perl-module-strict" +RDEPENDS:perl-module-file-copy += "perl-module-warnings" +RDEPENDS:perl-module-file-dosglob += "perl-module-strict" +RDEPENDS:perl-module-file-dosglob += "perl-module-text-parsewords" +RDEPENDS:perl-module-file-dosglob += "perl-module-warnings" +RDEPENDS:perl-module-file-dosglob += "perl-module-xsloader" +RDEPENDS:perl-module-file-fetch += "perl-module-constant" +RDEPENDS:perl-module-file-fetch += "perl-module-cwd" +RDEPENDS:perl-module-file-fetch += "perl-module-file-basename" +RDEPENDS:perl-module-file-fetch += "perl-module-file-copy" +RDEPENDS:perl-module-file-fetch += "perl-module-filehandle" +RDEPENDS:perl-module-file-fetch += "perl-module-file-path" +RDEPENDS:perl-module-file-fetch += "perl-module-file-temp" +RDEPENDS:perl-module-file-fetch += "perl-module-ipc-cmd" +RDEPENDS:perl-module-file-fetch += "perl-module-locale-maketext-simple" +RDEPENDS:perl-module-file-fetch += "perl-module-load" +RDEPENDS:perl-module-file-fetch += "perl-module-params-check" +RDEPENDS:perl-module-file-fetch += "perl-module-strict" +RDEPENDS:perl-module-file-fetch += "perl-module-vars" +RDEPENDS:perl-module-file-find += "perl-module-cwd" +RDEPENDS:perl-module-file-find += "perl-module-exporter" +RDEPENDS:perl-module-file-find += "perl-module-file-basename" +RDEPENDS:perl-module-file-find += "perl-module-strict" +RDEPENDS:perl-module-file-find += "perl-module-warnings" +RDEPENDS:perl-module-file-find += "perl-module-warnings-register" +RDEPENDS:perl-module-file-globmapper += "perl-module-file-glob" +RDEPENDS:perl-module-file-globmapper += "perl-module-strict" +RDEPENDS:perl-module-file-globmapper += "perl-module-warnings" +RDEPENDS:perl-module-file-glob += "perl-module-exporter" +RDEPENDS:perl-module-file-glob += "perl-module-strict" +RDEPENDS:perl-module-file-glob += "perl-module-xsloader" +RDEPENDS:perl-module-filehandle += "perl-module-exporter" +RDEPENDS:perl-module-filehandle += "perl-module-fcntl" +RDEPENDS:perl-module-filehandle += "perl-module-io-file" +RDEPENDS:perl-module-filehandle += "perl-module-strict" +RDEPENDS:perl-module-file-path += "perl-module-cwd" +RDEPENDS:perl-module-file-path += "perl-module-exporter" +RDEPENDS:perl-module-file-path += "perl-module-file-basename" +RDEPENDS:perl-module-file-path += "perl-module-strict" +RDEPENDS:perl-module-file-path += "perl-module-vars" +RDEPENDS:perl-module-file-stat += "perl-module-class-struct" +RDEPENDS:perl-module-file-stat += "perl-module-constant" +RDEPENDS:perl-module-file-stat += "perl-module-exporter" +RDEPENDS:perl-module-file-stat += "perl-module-fcntl" +RDEPENDS:perl-module-file-stat += "perl-module-overload " +RDEPENDS:perl-module-file-stat += "perl-module-strict" +RDEPENDS:perl-module-file-stat += "perl-module-warnings" +RDEPENDS:perl-module-file-stat += "perl-module-warnings-register" +RDEPENDS:perl-module-file-temp += "perl-module-constant" +RDEPENDS:perl-module-file-temp += "perl-module-cwd" +RDEPENDS:perl-module-file-temp += "perl-module-errno" +RDEPENDS:perl-module-file-temp += "perl-module-exporter" +RDEPENDS:perl-module-file-temp += "perl-module-fcntl" +RDEPENDS:perl-module-file-temp += "perl-module-file-path" +RDEPENDS:perl-module-file-temp += "perl-module-io-seekable" +RDEPENDS:perl-module-file-temp += "perl-module-overload" +RDEPENDS:perl-module-file-temp += "perl-module-parent" +RDEPENDS:perl-module-file-temp += "perl-module-posix" +RDEPENDS:perl-module-file-temp += "perl-module-strict" +RDEPENDS:perl-module-filter-simple += "perl-module-filter-util-call" +RDEPENDS:perl-module-filter-simple += "perl-module-text-balanced" +RDEPENDS:perl-module-filter-util-call += "perl-module-exporter" +RDEPENDS:perl-module-filter-util-call += "perl-module-strict" +RDEPENDS:perl-module-filter-util-call += "perl-module-warnings" +RDEPENDS:perl-module-filter-util-call += "perl-module-xsloader" +RDEPENDS:perl-module-findbin += "perl-module-cwd" +RDEPENDS:perl-module-findbin += "perl-module-exporter" +RDEPENDS:perl-module-findbin += "perl-module-file-basename" +RDEPENDS:perl-module-findbin += "perl-module-strict" +RDEPENDS:perl-module-findbin += "perl-module-warnings" +RDEPENDS:perl-module-gdbm-file += "perl-module-exporter" +RDEPENDS:perl-module-gdbm-file += "perl-module-strict" +RDEPENDS:perl-module-gdbm-file += "perl-module-tie-hash" +RDEPENDS:perl-module-gdbm-file += "perl-module-warnings" +RDEPENDS:perl-module-gdbm-file += "perl-module-xsloader" +RDEPENDS:perl-module-getopt-long += "perl-module-constant" +RDEPENDS:perl-module-getopt-long += "perl-module-exporter" +RDEPENDS:perl-module-getopt-long += "perl-module-overload" +RDEPENDS:perl-module-getopt-long += "perl-module-pod-usage" +RDEPENDS:perl-module-getopt-long += "perl-module-strict" +RDEPENDS:perl-module-getopt-long += "perl-module-text-parsewords" +RDEPENDS:perl-module-getopt-long += "perl-module-vars" +RDEPENDS:perl-module-getopt-long += "perl-module-warnings" +RDEPENDS:perl-module-getopt-std += "perl-module-exporter" +RDEPENDS:perl-module-getopt-std += "perl-module-strict" +RDEPENDS:perl-module-getopt-std += "perl-module-warnings" +RDEPENDS:perl-module-hash-util-fieldhash += "perl-module-builtin" +RDEPENDS:perl-module-hash-util-fieldhash += "perl-module-exporter" +RDEPENDS:perl-module-hash-util-fieldhash += "perl-module-strict" +RDEPENDS:perl-module-hash-util-fieldhash += "perl-module-warnings" +RDEPENDS:perl-module-hash-util-fieldhash += "perl-module-xsloader" +RDEPENDS:perl-module-hash-util += "perl-module-builtin" +RDEPENDS:perl-module-hash-util += "perl-module-exporter" +RDEPENDS:perl-module-hash-util += "perl-module-hash-util-fieldhash" +RDEPENDS:perl-module-hash-util += "perl-module-strict" +RDEPENDS:perl-module-hash-util += "perl-module-warnings" +RDEPENDS:perl-module-hash-util += "perl-module-warnings-register" +RDEPENDS:perl-module-hash-util += "perl-module-xsloader" +RDEPENDS:perl-module-i18n-collate += "perl-module-exporter" +RDEPENDS:perl-module-i18n-collate += "perl-module-overload" +RDEPENDS:perl-module-i18n-collate += "perl-module-posix" +RDEPENDS:perl-module-i18n-collate += "perl-module-strict" +RDEPENDS:perl-module-i18n-collate += "perl-module-warnings-register" +RDEPENDS:perl-module-i18n-langinfo += "perl-module-exporter" +RDEPENDS:perl-module-i18n-langinfo += "perl-module-strict" +RDEPENDS:perl-module-i18n-langinfo += "perl-module-warnings" +RDEPENDS:perl-module-i18n-langinfo += "perl-module-xsloader" +RDEPENDS:perl-module-i18n-langtags-detect += "perl-module-i18n-langtags" +RDEPENDS:perl-module-i18n-langtags-detect += "perl-module-strict" +RDEPENDS:perl-module-i18n-langtags-list += "perl-module-strict" +RDEPENDS:perl-module-i18n-langtags += "perl-module-exporter" +RDEPENDS:perl-module-i18n-langtags += "perl-module-strict" +RDEPENDS:perl-module-if += "perl-module-strict" +RDEPENDS:perl-module-io-compress-adapter-bzip2 += "perl-module-bytes" +RDEPENDS:perl-module-io-compress-adapter-bzip2 += "perl-module-compress-raw-bzip2" +RDEPENDS:perl-module-io-compress-adapter-bzip2 += "perl-module-io-compress-base-common" +RDEPENDS:perl-module-io-compress-adapter-bzip2 += "perl-module-strict" +RDEPENDS:perl-module-io-compress-adapter-bzip2 += "perl-module-warnings" +RDEPENDS:perl-module-io-compress-adapter-deflate += "perl-module-bytes" +RDEPENDS:perl-module-io-compress-adapter-deflate += "perl-module-compress-raw-zlib" +RDEPENDS:perl-module-io-compress-adapter-deflate += "perl-module-exporter" +RDEPENDS:perl-module-io-compress-adapter-deflate += "perl-module-io-compress-base-common" +RDEPENDS:perl-module-io-compress-adapter-deflate += "perl-module-strict" +RDEPENDS:perl-module-io-compress-adapter-deflate += "perl-module-warnings" +RDEPENDS:perl-module-io-compress-adapter-identity += "perl-module-bytes" +RDEPENDS:perl-module-io-compress-adapter-identity += "perl-module-io-compress-base-common" +RDEPENDS:perl-module-io-compress-adapter-identity += "perl-module-strict" +RDEPENDS:perl-module-io-compress-adapter-identity += "perl-module-warnings" +RDEPENDS:perl-module-io-compress-base-common += "perl-module-bytes" +RDEPENDS:perl-module-io-compress-base-common += "perl-module-constant" +RDEPENDS:perl-module-io-compress-base-common += "perl-module-encode" +RDEPENDS:perl-module-io-compress-base-common += "perl-module-exporter" +RDEPENDS:perl-module-io-compress-base-common += "perl-module-file-globmapper" +RDEPENDS:perl-module-io-compress-base-common += "perl-module-strict " +RDEPENDS:perl-module-io-compress-base-common += "perl-module-strict" +RDEPENDS:perl-module-io-compress-base-common += "perl-module-utf8" +RDEPENDS:perl-module-io-compress-base-common += "perl-module-warnings" +RDEPENDS:perl-module-io-compress-base += "perl-module-io-compress-base-common" +RDEPENDS:perl-module-io-compress-base += "perl-module-io-file" +RDEPENDS:perl-module-io-compress-base += "perl-module-io-handle " +RDEPENDS:perl-module-io-compress-base += "perl-module-strict " +RDEPENDS:perl-module-io-compress-base += "perl-module-warnings" +RDEPENDS:perl-module-io-compress-bzip2 += "perl-module-bytes" +RDEPENDS:perl-module-io-compress-bzip2 += "perl-module-exporter " +RDEPENDS:perl-module-io-compress-bzip2 += "perl-module-io-compress-adapter-bzip2" +RDEPENDS:perl-module-io-compress-bzip2 += "perl-module-io-compress-base" +RDEPENDS:perl-module-io-compress-bzip2 += "perl-module-io-compress-base-common" +RDEPENDS:perl-module-io-compress-bzip2 += "perl-module-strict " +RDEPENDS:perl-module-io-compress-bzip2 += "perl-module-warnings" +RDEPENDS:perl-module-io-compress-deflate += "perl-module-bytes" +RDEPENDS:perl-module-io-compress-deflate += "perl-module-exporter " +RDEPENDS:perl-module-io-compress-deflate += "perl-module-io-compress-adapter-deflate" +RDEPENDS:perl-module-io-compress-deflate += "perl-module-io-compress-base-common" +RDEPENDS:perl-module-io-compress-deflate += "perl-module-io-compress-rawdeflate" +RDEPENDS:perl-module-io-compress-deflate += "perl-module-io-compress-zlib-constants" +RDEPENDS:perl-module-io-compress-deflate += "perl-module-strict " +RDEPENDS:perl-module-io-compress-deflate += "perl-module-warnings" +RDEPENDS:perl-module-io-compress-gzip-constants += "perl-module-bytes" +RDEPENDS:perl-module-io-compress-gzip-constants += "perl-module-constant" +RDEPENDS:perl-module-io-compress-gzip-constants += "perl-module-exporter" +RDEPENDS:perl-module-io-compress-gzip-constants += "perl-module-strict " +RDEPENDS:perl-module-io-compress-gzip-constants += "perl-module-warnings" +RDEPENDS:perl-module-io-compress-gzip += "perl-module-bytes" +RDEPENDS:perl-module-io-compress-gzip += "perl-module-exporter " +RDEPENDS:perl-module-io-compress-gzip += "perl-module-io-compress-adapter-deflate" +RDEPENDS:perl-module-io-compress-gzip += "perl-module-io-compress-base-common" +RDEPENDS:perl-module-io-compress-gzip += "perl-module-io-compress-gzip-constants" +RDEPENDS:perl-module-io-compress-gzip += "perl-module-io-compress-rawdeflate" +RDEPENDS:perl-module-io-compress-gzip += "perl-module-io-compress-zlib-extra" +RDEPENDS:perl-module-io-compress-gzip += "perl-module-strict " +RDEPENDS:perl-module-io-compress-gzip += "perl-module-warnings" +RDEPENDS:perl-module-io-compress-rawdeflate += "perl-module-bytes" +RDEPENDS:perl-module-io-compress-rawdeflate += "perl-module-compress-raw-zlib" +RDEPENDS:perl-module-io-compress-rawdeflate += "perl-module-exporter " +RDEPENDS:perl-module-io-compress-rawdeflate += "perl-module-fcntl" +RDEPENDS:perl-module-io-compress-rawdeflate += "perl-module-io-compress-adapter-deflate" +RDEPENDS:perl-module-io-compress-rawdeflate += "perl-module-io-compress-base" +RDEPENDS:perl-module-io-compress-rawdeflate += "perl-module-io-compress-base-common" +RDEPENDS:perl-module-io-compress-rawdeflate += "perl-module-strict " +RDEPENDS:perl-module-io-compress-rawdeflate += "perl-module-warnings" +RDEPENDS:perl-module-io-compress-zip-constants += "perl-module-constant" +RDEPENDS:perl-module-io-compress-zip-constants += "perl-module-exporter" +RDEPENDS:perl-module-io-compress-zip-constants += "perl-module-strict " +RDEPENDS:perl-module-io-compress-zip-constants += "perl-module-warnings" +RDEPENDS:perl-module-io-compress-zip += "perl-module-bytes" +RDEPENDS:perl-module-io-compress-zip += "perl-module-compress-raw-zlib" +RDEPENDS:perl-module-io-compress-zip += "perl-module-config" +RDEPENDS:perl-module-io-compress-zip += "perl-module-exporter " +RDEPENDS:perl-module-io-compress-zip += "perl-module-fcntl" +RDEPENDS:perl-module-io-compress-zip += "perl-module-io-compress-adapter-deflate" +RDEPENDS:perl-module-io-compress-zip += "perl-module-io-compress-adapter-identity" +RDEPENDS:perl-module-io-compress-zip += "perl-module-io-compress-base-common" +RDEPENDS:perl-module-io-compress-zip += "perl-module-io-compress-bzip2 " +RDEPENDS:perl-module-io-compress-zip += "perl-module-io-compress-rawdeflate" +RDEPENDS:perl-module-io-compress-zip += "perl-module-io-compress-zip-constants" +RDEPENDS:perl-module-io-compress-zip += "perl-module-io-compress-zlib-extra" +RDEPENDS:perl-module-io-compress-zip += "perl-module-strict " +RDEPENDS:perl-module-io-compress-zip += "perl-module-warnings" +RDEPENDS:perl-module-io-compress-zlib-constants += "perl-module-bytes" +RDEPENDS:perl-module-io-compress-zlib-constants += "perl-module-constant" +RDEPENDS:perl-module-io-compress-zlib-constants += "perl-module-exporter" +RDEPENDS:perl-module-io-compress-zlib-constants += "perl-module-strict " +RDEPENDS:perl-module-io-compress-zlib-constants += "perl-module-warnings" +RDEPENDS:perl-module-io-compress-zlib-extra += "perl-module-bytes" +RDEPENDS:perl-module-io-compress-zlib-extra += "perl-module-io-compress-gzip-constants" +RDEPENDS:perl-module-io-compress-zlib-extra += "perl-module-strict " +RDEPENDS:perl-module-io-compress-zlib-extra += "perl-module-warnings" +RDEPENDS:perl-module-io-dir += "perl-module-exporter" +RDEPENDS:perl-module-io-dir += "perl-module-file-stat" +RDEPENDS:perl-module-io-dir += "perl-module-io-file" +RDEPENDS:perl-module-io-dir += "perl-module-strict" +RDEPENDS:perl-module-io-dir += "perl-module-tie-hash" +RDEPENDS:perl-module-io-file += "perl-module-exporter" +RDEPENDS:perl-module-io-file += "perl-module-fcntl" +RDEPENDS:perl-module-io-file += "perl-module-io-seekable" +RDEPENDS:perl-module-io-file += "perl-module-selectsaver" +RDEPENDS:perl-module-io-file += "perl-module-strict" +RDEPENDS:perl-module-io-handle += "perl-module-exporter" +RDEPENDS:perl-module-io-handle += "perl-module-io" +RDEPENDS:perl-module-io-handle += "perl-module-io-file" +RDEPENDS:perl-module-io-handle += "perl-module-selectsaver" +RDEPENDS:perl-module-io-handle += "perl-module-strict" +RDEPENDS:perl-module-io += "perl-module-strict" +RDEPENDS:perl-module-io += "perl-module-warnings" +RDEPENDS:perl-module-io += "perl-module-xsloader" +RDEPENDS:perl-module-io-pipe += "perl-module-fcntl" +RDEPENDS:perl-module-io-pipe += "perl-module-io-handle" +RDEPENDS:perl-module-io-pipe += "perl-module-strict" +RDEPENDS:perl-module-io-poll += "perl-module-exporter" +RDEPENDS:perl-module-io-poll += "perl-module-io-handle" +RDEPENDS:perl-module-io-poll += "perl-module-strict" +RDEPENDS:perl-module-io-seekable += "perl-module-exporter" +RDEPENDS:perl-module-io-seekable += "perl-module-fcntl" +RDEPENDS:perl-module-io-seekable += "perl-module-io-handle" +RDEPENDS:perl-module-io-seekable += "perl-module-strict" +RDEPENDS:perl-module-io-select += "perl-module-exporter" +RDEPENDS:perl-module-io-select += "perl-module-strict" +RDEPENDS:perl-module-io-select += "perl-module-warnings-register" +RDEPENDS:perl-module-io-socket-inet += "perl-module-errno" +RDEPENDS:perl-module-io-socket-inet += "perl-module-exporter" +RDEPENDS:perl-module-io-socket-inet += "perl-module-io-socket" +RDEPENDS:perl-module-io-socket-inet += "perl-module-socket" +RDEPENDS:perl-module-io-socket-inet += "perl-module-strict" +RDEPENDS:perl-module-io-socket-ip += "perl-module-base" +RDEPENDS:perl-module-io-socket-ip += "perl-module-constant" +RDEPENDS:perl-module-io-socket-ip += "perl-module-errno" +RDEPENDS:perl-module-io-socket-ip += "perl-module-posix" +RDEPENDS:perl-module-io-socket-ip += "perl-module-socket" +RDEPENDS:perl-module-io-socket-ip += "perl-module-strict" +RDEPENDS:perl-module-io-socket-ip += "perl-module-warnings" +RDEPENDS:perl-module-io-socket += "perl-module-errno" +RDEPENDS:perl-module-io-socket += "perl-module-exporter" +RDEPENDS:perl-module-io-socket += "perl-module-io-handle" +RDEPENDS:perl-module-io-socket += "perl-module-io-select" +RDEPENDS:perl-module-io-socket += "perl-module-io-socket-inet" +RDEPENDS:perl-module-io-socket += "perl-module-io-socket-unix" +RDEPENDS:perl-module-io-socket += "perl-module-socket" +RDEPENDS:perl-module-io-socket += "perl-module-strict" +RDEPENDS:perl-module-io-socket-unix += "perl-module-io-socket" +RDEPENDS:perl-module-io-socket-unix += "perl-module-strict" +RDEPENDS:perl-module-io-uncompress-adapter-bunzip2 += "perl-module-bytes" +RDEPENDS:perl-module-io-uncompress-adapter-bunzip2 += "perl-module-compress-raw-bzip2" +RDEPENDS:perl-module-io-uncompress-adapter-bunzip2 += "perl-module-io-compress-base-common" +RDEPENDS:perl-module-io-uncompress-adapter-bunzip2 += "perl-module-strict" +RDEPENDS:perl-module-io-uncompress-adapter-bunzip2 += "perl-module-warnings" +RDEPENDS:perl-module-io-uncompress-adapter-identity += "perl-module-bytes" +RDEPENDS:perl-module-io-uncompress-adapter-identity += "perl-module-compress-raw-zlib" +RDEPENDS:perl-module-io-uncompress-adapter-identity += "perl-module-io-compress-base-common" +RDEPENDS:perl-module-io-uncompress-adapter-identity += "perl-module-io-compress-zip-constants " +RDEPENDS:perl-module-io-uncompress-adapter-identity += "perl-module-strict" +RDEPENDS:perl-module-io-uncompress-adapter-identity += "perl-module-warnings" +RDEPENDS:perl-module-io-uncompress-adapter-inflate += "perl-module-bytes" +RDEPENDS:perl-module-io-uncompress-adapter-inflate += "perl-module-compress-raw-zlib" +RDEPENDS:perl-module-io-uncompress-adapter-inflate += "perl-module-io-compress-base-common" +RDEPENDS:perl-module-io-uncompress-adapter-inflate += "perl-module-strict" +RDEPENDS:perl-module-io-uncompress-adapter-inflate += "perl-module-warnings" +RDEPENDS:perl-module-io-uncompress-anyinflate += "perl-module-bytes" +RDEPENDS:perl-module-io-uncompress-anyinflate += "perl-module-exporter " +RDEPENDS:perl-module-io-uncompress-anyinflate += "perl-module-io-compress-base-common" +RDEPENDS:perl-module-io-uncompress-anyinflate += "perl-module-io-uncompress-adapter-inflate" +RDEPENDS:perl-module-io-uncompress-anyinflate += "perl-module-io-uncompress-base" +RDEPENDS:perl-module-io-uncompress-anyinflate += "perl-module-io-uncompress-gunzip" +RDEPENDS:perl-module-io-uncompress-anyinflate += "perl-module-io-uncompress-inflate" +RDEPENDS:perl-module-io-uncompress-anyinflate += "perl-module-io-uncompress-rawinflate" +RDEPENDS:perl-module-io-uncompress-anyinflate += "perl-module-io-uncompress-unzip" +RDEPENDS:perl-module-io-uncompress-anyinflate += "perl-module-strict" +RDEPENDS:perl-module-io-uncompress-anyinflate += "perl-module-warnings" +RDEPENDS:perl-module-io-uncompress-anyuncompress += "perl-module-bytes" +RDEPENDS:perl-module-io-uncompress-anyuncompress += "perl-module-exporter " +RDEPENDS:perl-module-io-uncompress-anyuncompress += "perl-module-io-compress-base-common" +RDEPENDS:perl-module-io-uncompress-anyuncompress += "perl-module-io-uncompress-base" +RDEPENDS:perl-module-io-uncompress-anyuncompress += "perl-module-strict" +RDEPENDS:perl-module-io-uncompress-anyuncompress += "perl-module-warnings" +RDEPENDS:perl-module-io-uncompress-base += "perl-module-bytes" +RDEPENDS:perl-module-io-uncompress-base += "perl-module-constant" +RDEPENDS:perl-module-io-uncompress-base += "perl-module-io-compress-base-common" +RDEPENDS:perl-module-io-uncompress-base += "perl-module-io-file " +RDEPENDS:perl-module-io-uncompress-base += "perl-module-list-util" +RDEPENDS:perl-module-io-uncompress-base += "perl-module-strict " +RDEPENDS:perl-module-io-uncompress-base += "perl-module-warnings" +RDEPENDS:perl-module-io-uncompress-bunzip2 += "perl-module-bytes" +RDEPENDS:perl-module-io-uncompress-bunzip2 += "perl-module-exporter " +RDEPENDS:perl-module-io-uncompress-bunzip2 += "perl-module-io-compress-base-common" +RDEPENDS:perl-module-io-uncompress-bunzip2 += "perl-module-io-uncompress-adapter-bunzip2" +RDEPENDS:perl-module-io-uncompress-bunzip2 += "perl-module-io-uncompress-base" +RDEPENDS:perl-module-io-uncompress-bunzip2 += "perl-module-strict " +RDEPENDS:perl-module-io-uncompress-bunzip2 += "perl-module-warnings" +RDEPENDS:perl-module-io-uncompress-gunzip += "perl-module-bytes" +RDEPENDS:perl-module-io-uncompress-gunzip += "perl-module-compress-raw-zlib" +RDEPENDS:perl-module-io-uncompress-gunzip += "perl-module-exporter " +RDEPENDS:perl-module-io-uncompress-gunzip += "perl-module-io-compress-base-common" +RDEPENDS:perl-module-io-uncompress-gunzip += "perl-module-io-compress-gzip-constants" +RDEPENDS:perl-module-io-uncompress-gunzip += "perl-module-io-compress-zlib-extra" +RDEPENDS:perl-module-io-uncompress-gunzip += "perl-module-io-uncompress-rawinflate" +RDEPENDS:perl-module-io-uncompress-gunzip += "perl-module-strict " +RDEPENDS:perl-module-io-uncompress-gunzip += "perl-module-warnings" +RDEPENDS:perl-module-io-uncompress-inflate += "perl-module-bytes" +RDEPENDS:perl-module-io-uncompress-inflate += "perl-module-exporter " +RDEPENDS:perl-module-io-uncompress-inflate += "perl-module-io-compress-base-common" +RDEPENDS:perl-module-io-uncompress-inflate += "perl-module-io-compress-zlib-constants" +RDEPENDS:perl-module-io-uncompress-inflate += "perl-module-io-uncompress-rawinflate" +RDEPENDS:perl-module-io-uncompress-inflate += "perl-module-strict " +RDEPENDS:perl-module-io-uncompress-inflate += "perl-module-warnings" +RDEPENDS:perl-module-io-uncompress-rawinflate += "perl-module-bytes" +RDEPENDS:perl-module-io-uncompress-rawinflate += "perl-module-compress-raw-zlib" +RDEPENDS:perl-module-io-uncompress-rawinflate += "perl-module-exporter " +RDEPENDS:perl-module-io-uncompress-rawinflate += "perl-module-io-compress-base-common" +RDEPENDS:perl-module-io-uncompress-rawinflate += "perl-module-io-uncompress-adapter-inflate" +RDEPENDS:perl-module-io-uncompress-rawinflate += "perl-module-io-uncompress-base" +RDEPENDS:perl-module-io-uncompress-rawinflate += "perl-module-strict " +RDEPENDS:perl-module-io-uncompress-rawinflate += "perl-module-warnings" +RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-bytes" +RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-compress-raw-zlib" +RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-constant" +RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-encode" +RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-exporter " +RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-fcntl" +RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-io-compress-base-common" +RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-io-compress-zip-constants" +RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-io-compress-zlib-extra" +RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-io-file" +RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-io-uncompress-adapter-identity" +RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-io-uncompress-adapter-inflate" +RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-io-uncompress-rawinflate" +RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-posix" +RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-strict " +RDEPENDS:perl-module-io-uncompress-unzip += "perl-module-warnings" +RDEPENDS:perl-module-io-zlib += "perl-module-fcntl" +RDEPENDS:perl-module-io-zlib += "perl-module-io-handle" +RDEPENDS:perl-module-io-zlib += "perl-module-strict" +RDEPENDS:perl-module-io-zlib += "perl-module-tie-handle" +RDEPENDS:perl-module-io-zlib += "perl-module-warnings" +RDEPENDS:perl-module-ipc-cmd += "perl-module-constant" +RDEPENDS:perl-module-ipc-cmd += "perl-module-exporter" +RDEPENDS:perl-module-ipc-cmd += "perl-module-extutils-makemaker" +RDEPENDS:perl-module-ipc-cmd += "perl-module-filehandle" +RDEPENDS:perl-module-ipc-cmd += "perl-module-io-handle" +RDEPENDS:perl-module-ipc-cmd += "perl-module-io-select" +RDEPENDS:perl-module-ipc-cmd += "perl-module-ipc-open3" +RDEPENDS:perl-module-ipc-cmd += "perl-module-locale-maketext-simple" +RDEPENDS:perl-module-ipc-cmd += "perl-module-load" +RDEPENDS:perl-module-ipc-cmd += "perl-module-params-check" +RDEPENDS:perl-module-ipc-cmd += "perl-module-posix" +RDEPENDS:perl-module-ipc-cmd += "perl-module-socket" +RDEPENDS:perl-module-ipc-cmd += "perl-module-strict" +RDEPENDS:perl-module-ipc-cmd += "perl-module-text-parsewords" +RDEPENDS:perl-module-ipc-cmd += "perl-module-time-hires" +RDEPENDS:perl-module-ipc-cmd += "perl-module-vars" +RDEPENDS:perl-module-ipc-msg += "perl-module-class-struct" +RDEPENDS:perl-module-ipc-msg += "perl-module-ipc-sysv" +RDEPENDS:perl-module-ipc-msg += "perl-module-strict" +RDEPENDS:perl-module-ipc-msg += "perl-module-vars" +RDEPENDS:perl-module-ipc-open2 += "perl-module-exporter" +RDEPENDS:perl-module-ipc-open2 += "perl-module-ipc-open3" +RDEPENDS:perl-module-ipc-open2 += "perl-module-strict" +RDEPENDS:perl-module-ipc-open3 += "perl-module-constant" +RDEPENDS:perl-module-ipc-open3 += "perl-module-exporter" +RDEPENDS:perl-module-ipc-open3 += "perl-module-fcntl" +RDEPENDS:perl-module-ipc-open3 += "perl-module-io-pipe" +RDEPENDS:perl-module-ipc-open3 += "perl-module-posix" +RDEPENDS:perl-module-ipc-open3 += "perl-module-strict" +RDEPENDS:perl-module-ipc-semaphore += "perl-module-class-struct" +RDEPENDS:perl-module-ipc-semaphore += "perl-module-ipc-sysv" +RDEPENDS:perl-module-ipc-semaphore += "perl-module-strict" +RDEPENDS:perl-module-ipc-semaphore += "perl-module-vars" +RDEPENDS:perl-module-ipc-sharedmem += "perl-module-class-struct" +RDEPENDS:perl-module-ipc-sharedmem += "perl-module-ipc-sysv" +RDEPENDS:perl-module-ipc-sharedmem += "perl-module-strict" +RDEPENDS:perl-module-ipc-sharedmem += "perl-module-vars" +RDEPENDS:perl-module-ipc-sysv += "perl-module-config" +RDEPENDS:perl-module-ipc-sysv += "perl-module-exporter" +RDEPENDS:perl-module-ipc-sysv += "perl-module-strict" +RDEPENDS:perl-module-ipc-sysv += "perl-module-vars" +RDEPENDS:perl-module-ipc-sysv += "perl-module-xsloader" +RDEPENDS:perl-module-json-pp-boolean += "perl-module-overload" +RDEPENDS:perl-module-json-pp-boolean += "perl-module-strict" +RDEPENDS:perl-module-json-pp += "perl-module-b" +RDEPENDS:perl-module-json-pp += "perl-module-bytes" +RDEPENDS:perl-module-json-pp += "perl-module-constant" +RDEPENDS:perl-module-json-pp += "perl-module-encode" +RDEPENDS:perl-module-json-pp += "perl-module-exporter" +RDEPENDS:perl-module-json-pp += "perl-module-json-pp-boolean" +RDEPENDS:perl-module-json-pp += "perl-module-math-bigfloat" +RDEPENDS:perl-module-json-pp += "perl-module-math-bigint" +RDEPENDS:perl-module-json-pp += "perl-module-overload" +RDEPENDS:perl-module-json-pp += "perl-module-strict" +RDEPENDS:perl-module-json-pp += "perl-module-subs" +RDEPENDS:perl-module-less += "perl-module-strict" +RDEPENDS:perl-module-less += "perl-module-warnings" +RDEPENDS:perl-module-lib += "perl-module-config" +RDEPENDS:perl-module-lib += "perl-module-strict" +RDEPENDS:perl-module-list-util += "perl-module-exporter" +RDEPENDS:perl-module-list-util += "perl-module-strict" +RDEPENDS:perl-module-list-util += "perl-module-warnings" +RDEPENDS:perl-module-list-util += "perl-module-xsloader" +RDEPENDS:perl-module-list-util-xs += "perl-module-list-util" +RDEPENDS:perl-module-list-util-xs += "perl-module-strict" +RDEPENDS:perl-module-list-util-xs += "perl-module-warnings" +RDEPENDS:perl-module-loaded += "perl-module-strict" +RDEPENDS:perl-module-loaded += "perl-module-vars" +RDEPENDS:perl-module-load += "perl-module-config" +RDEPENDS:perl-module-load += "perl-module-constant" +RDEPENDS:perl-module-load += "perl-module-exporter" +RDEPENDS:perl-module-load += "perl-module-filehandle" +RDEPENDS:perl-module-load += "perl-module-locale-maketext-simple" +RDEPENDS:perl-module-load += "perl-module-corelist" +RDEPENDS:perl-module-load += "perl-module-load" +RDEPENDS:perl-module-load += "perl-module-params-check" +RDEPENDS:perl-module-load += "perl-module-strict" +RDEPENDS:perl-module-load += "perl-module-vars" +RDEPENDS:perl-module-load += "perl-module-version" +RDEPENDS:perl-module-load += "perl-module-warnings" +RDEPENDS:perl-module-locale-maketext-gutsloader += "perl-module-locale-maketext" +RDEPENDS:perl-module-locale-maketext-guts += "perl-module-locale-maketext" +RDEPENDS:perl-module-locale-maketext += "perl-module-i18n-langtags" +RDEPENDS:perl-module-locale-maketext += "perl-module-i18n-langtags-detect" +RDEPENDS:perl-module-locale-maketext += "perl-module-integer" +RDEPENDS:perl-module-locale-maketext += "perl-module-strict" +RDEPENDS:perl-module-locale-maketext-simple += "perl-module-base" +RDEPENDS:perl-module-locale-maketext-simple += "perl-module-strict" +RDEPENDS:perl-module-locale += "perl-module-config" +RDEPENDS:perl-module-locale += "perl-module-strict" +RDEPENDS:perl-module-locale += "perl-module-warnings" +RDEPENDS:perl-module-math-bigfloat += "perl-module-exporter" +RDEPENDS:perl-module-math-bigfloat += "perl-module-math-bigint" +RDEPENDS:perl-module-math-bigfloat += "perl-module-math-complex" +RDEPENDS:perl-module-math-bigfloat += "perl-module-overload" +RDEPENDS:perl-module-math-bigfloat += "perl-module-strict" +RDEPENDS:perl-module-math-bigfloat += "perl-module-warnings" +RDEPENDS:perl-module-math-bigfloat-trace += "perl-module-exporter" +RDEPENDS:perl-module-math-bigfloat-trace += "perl-module-math-bigfloat" +RDEPENDS:perl-module-math-bigfloat-trace += "perl-module-overload" +RDEPENDS:perl-module-math-bigfloat-trace += "perl-module-strict" +RDEPENDS:perl-module-math-bigfloat-trace += "perl-module-warnings" +RDEPENDS:perl-module-math-bigint-calc += "perl-module-constant" +RDEPENDS:perl-module-math-bigint-calc += "perl-module-integer" +RDEPENDS:perl-module-math-bigint-calc += "perl-module-math-bigint-lib" +RDEPENDS:perl-module-math-bigint-calc += "perl-module-strict" +RDEPENDS:perl-module-math-bigint-calc += "perl-module-warnings" +RDEPENDS:perl-module-math-bigint-fastcalc += "perl-module-config" +RDEPENDS:perl-module-math-bigint-fastcalc += "perl-module-math-bigint-calc" +RDEPENDS:perl-module-math-bigint-fastcalc += "perl-module-strict" +RDEPENDS:perl-module-math-bigint-fastcalc += "perl-module-warnings" +RDEPENDS:perl-module-math-bigint-fastcalc += "perl-module-xsloader" +RDEPENDS:perl-module-math-bigint-lib += "perl-module-overload" +RDEPENDS:perl-module-math-bigint-lib += "perl-module-strict" +RDEPENDS:perl-module-math-bigint-lib += "perl-module-warnings" +RDEPENDS:perl-module-math-bigint += "perl-module-exporter" +RDEPENDS:perl-module-math-bigint += "perl-module-math-bigfloat" +RDEPENDS:perl-module-math-bigint += "perl-module-math-complex" +RDEPENDS:perl-module-math-bigint += "perl-module-overload" +RDEPENDS:perl-module-math-bigint += "perl-module-strict" +RDEPENDS:perl-module-math-bigint += "perl-module-warnings" +RDEPENDS:perl-module-math-bigint-trace += "perl-module-exporter" +RDEPENDS:perl-module-math-bigint-trace += "perl-module-math-bigint" +RDEPENDS:perl-module-math-bigint-trace += "perl-module-overload" +RDEPENDS:perl-module-math-bigint-trace += "perl-module-strict" +RDEPENDS:perl-module-math-bigint-trace += "perl-module-warnings" +RDEPENDS:perl-module-math-bigrat += "perl-module-math-bigfloat" +RDEPENDS:perl-module-math-bigrat += "perl-module-math-bigint" +RDEPENDS:perl-module-math-bigrat += "perl-module-math-complex" +RDEPENDS:perl-module-math-bigrat += "perl-module-overload" +RDEPENDS:perl-module-math-bigrat += "perl-module-strict" +RDEPENDS:perl-module-math-bigrat += "perl-module-warnings" +RDEPENDS:perl-module-math-bigrat-trace += "perl-module-exporter" +RDEPENDS:perl-module-math-bigrat-trace += "perl-module-math-bigrat" +RDEPENDS:perl-module-math-bigrat-trace += "perl-module-overload" +RDEPENDS:perl-module-math-bigrat-trace += "perl-module-strict" +RDEPENDS:perl-module-math-bigrat-trace += "perl-module-warnings" +RDEPENDS:perl-module-math-complex += "perl-module-config" +RDEPENDS:perl-module-math-complex += "perl-module-exporter" +RDEPENDS:perl-module-math-complex += "perl-module-overload" +RDEPENDS:perl-module-math-complex += "perl-module-strict" +RDEPENDS:perl-module-math-complex += "perl-module-warnings" +RDEPENDS:perl-module-math-trig += "perl-module-exporter" +RDEPENDS:perl-module-math-trig += "perl-module-math-complex" +RDEPENDS:perl-module-math-trig += "perl-module-strict" +RDEPENDS:perl-module-memoize-anydbm-file += "perl-module-vars" +RDEPENDS:perl-module-memoize += "perl-module-config" +RDEPENDS:perl-module-memoize += "perl-module-exporter" +RDEPENDS:perl-module-memoize += "perl-module-strict" +RDEPENDS:perl-module-memoize += "perl-module-vars" +RDEPENDS:perl-module-memoize-sdbm-file += "perl-module-sdbm-file" +RDEPENDS:perl-module-memoize-storable += "perl-module-storable" +RDEPENDS:perl-module-mime-base64 += "perl-module-exporter" +RDEPENDS:perl-module-mime-base64 += "perl-module-strict" +RDEPENDS:perl-module-mime-base64 += "perl-module-warnings" +RDEPENDS:perl-module-mime-base64 += "perl-module-xsloader" +RDEPENDS:perl-module-mime-quotedprint += "perl-module-exporter" +RDEPENDS:perl-module-mime-quotedprint += "perl-module-mime-base64" +RDEPENDS:perl-module-mime-quotedprint += "perl-module-strict" +RDEPENDS:perl-module-mime-quotedprint += "perl-module-warnings" +RDEPENDS:perl-module-mro += "perl-module-strict" +RDEPENDS:perl-module-mro += "perl-module-warnings" +RDEPENDS:perl-module-mro += "perl-module-xsloader" +RDEPENDS:perl-module-net-cmd += "perl-module-constant" +RDEPENDS:perl-module-net-cmd += "perl-module-errno" +RDEPENDS:perl-module-net-cmd += "perl-module-exporter" +RDEPENDS:perl-module-net-cmd += "perl-module-strict" +RDEPENDS:perl-module-net-cmd += "perl-module-warnings" +RDEPENDS:perl-module-net-config += "perl-module-exporter" +RDEPENDS:perl-module-net-config += "perl-module-socket" +RDEPENDS:perl-module-net-config += "perl-module-strict" +RDEPENDS:perl-module-net-config += "perl-module-warnings" +RDEPENDS:perl-module-net-domain += "perl-module-exporter" +RDEPENDS:perl-module-net-domain += "perl-module-net-config" +RDEPENDS:perl-module-net-domain += "perl-module-posix" +RDEPENDS:perl-module-net-domain += "perl-module-socket" +RDEPENDS:perl-module-net-domain += "perl-module-strict" +RDEPENDS:perl-module-net-domain += "perl-module-warnings" +RDEPENDS:perl-module-net-ftp-a += "perl-module-net-ftp-dataconn" +RDEPENDS:perl-module-net-ftp-a += "perl-module-strict" +RDEPENDS:perl-module-net-ftp-a += "perl-module-warnings" +RDEPENDS:perl-module-net-ftp-dataconn += "perl-module-errno" +RDEPENDS:perl-module-net-ftp-dataconn += "perl-module-net-cmd" +RDEPENDS:perl-module-net-ftp-dataconn += "perl-module-strict" +RDEPENDS:perl-module-net-ftp-dataconn += "perl-module-warnings" +RDEPENDS:perl-module-net-ftp-e += "perl-module-net-ftp-i" +RDEPENDS:perl-module-net-ftp-e += "perl-module-strict" +RDEPENDS:perl-module-net-ftp-e += "perl-module-warnings" +RDEPENDS:perl-module-net-ftp-i += "perl-module-net-ftp-dataconn" +RDEPENDS:perl-module-net-ftp-i += "perl-module-strict" +RDEPENDS:perl-module-net-ftp-i += "perl-module-warnings" +RDEPENDS:perl-module-net-ftp-l += "perl-module-net-ftp-i" +RDEPENDS:perl-module-net-ftp-l += "perl-module-strict" +RDEPENDS:perl-module-net-ftp-l += "perl-module-warnings" +RDEPENDS:perl-module-net-ftp += "perl-module-constant" +RDEPENDS:perl-module-net-ftp += "perl-module-fcntl" +RDEPENDS:perl-module-net-ftp += "perl-module-file-basename" +RDEPENDS:perl-module-net-ftp += "perl-module-io-socket" +RDEPENDS:perl-module-net-ftp += "perl-module-io-socket-ip" +RDEPENDS:perl-module-net-ftp += "perl-module-net-cmd" +RDEPENDS:perl-module-net-ftp += "perl-module-net-config" +RDEPENDS:perl-module-net-ftp += "perl-module-net-ftp-a" +RDEPENDS:perl-module-net-ftp += "perl-module-net-netrc" +RDEPENDS:perl-module-net-ftp += "perl-module-socket" +RDEPENDS:perl-module-net-ftp += "perl-module-strict" +RDEPENDS:perl-module-net-ftp += "perl-module-time-local" +RDEPENDS:perl-module-net-ftp += "perl-module-warnings" +RDEPENDS:perl-module-net-hostent += "perl-module-class-struct" +RDEPENDS:perl-module-net-hostent += "perl-module-exporter" +RDEPENDS:perl-module-net-hostent += "perl-module-socket" +RDEPENDS:perl-module-net-hostent += "perl-module-strict" +RDEPENDS:perl-module-net-netent += "perl-module-class-struct" +RDEPENDS:perl-module-net-netent += "perl-module-exporter" +RDEPENDS:perl-module-net-netent += "perl-module-socket" +RDEPENDS:perl-module-net-netent += "perl-module-strict" +RDEPENDS:perl-module-net-netrc += "perl-module-filehandle" +RDEPENDS:perl-module-net-netrc += "perl-module-strict" +RDEPENDS:perl-module-net-netrc += "perl-module-warnings" +RDEPENDS:perl-module-net-nntp += "perl-module-io-socket" +RDEPENDS:perl-module-net-nntp += "perl-module-io-socket-ip" +RDEPENDS:perl-module-net-nntp += "perl-module-net-cmd" +RDEPENDS:perl-module-net-nntp += "perl-module-net-config" +RDEPENDS:perl-module-net-nntp += "perl-module-strict" +RDEPENDS:perl-module-net-nntp += "perl-module-time-local" +RDEPENDS:perl-module-net-nntp += "perl-module-warnings" +RDEPENDS:perl-module-net-ping += "perl-module-constant" +RDEPENDS:perl-module-net-ping += "perl-module-exporter" +RDEPENDS:perl-module-net-ping += "perl-module-fcntl" +RDEPENDS:perl-module-net-ping += "perl-module-filehandle" +RDEPENDS:perl-module-net-ping += "perl-module-io-socket-inet" +RDEPENDS:perl-module-net-ping += "perl-module-posix" +RDEPENDS:perl-module-net-ping += "perl-module-socket" +RDEPENDS:perl-module-net-ping += "perl-module-strict" +RDEPENDS:perl-module-net-ping += "perl-module-time-hires" +RDEPENDS:perl-module-net-ping += "perl-module-vars" +RDEPENDS:perl-module-net-pop3 += "perl-module-io-socket" +RDEPENDS:perl-module-net-pop3 += "perl-module-io-socket-ip" +RDEPENDS:perl-module-net-pop3 += "perl-module-mime-base64" +RDEPENDS:perl-module-net-pop3 += "perl-module-net-cmd" +RDEPENDS:perl-module-net-pop3 += "perl-module-net-config" +RDEPENDS:perl-module-net-pop3 += "perl-module-net-netrc" +RDEPENDS:perl-module-net-pop3 += "perl-module-strict" +RDEPENDS:perl-module-net-pop3 += "perl-module-warnings" +RDEPENDS:perl-module-net-protoent += "perl-module-class-struct" +RDEPENDS:perl-module-net-protoent += "perl-module-exporter" +RDEPENDS:perl-module-net-protoent += "perl-module-strict" +RDEPENDS:perl-module-net-servent += "perl-module-class-struct" +RDEPENDS:perl-module-net-servent += "perl-module-exporter" +RDEPENDS:perl-module-net-servent += "perl-module-strict" +RDEPENDS:perl-module-net-smtp += "perl-module-io-socket" +RDEPENDS:perl-module-net-smtp += "perl-module-io-socket-ip" +RDEPENDS:perl-module-net-smtp += "perl-module-mime-base64" +RDEPENDS:perl-module-net-smtp += "perl-module-net-cmd" +RDEPENDS:perl-module-net-smtp += "perl-module-net-config" +RDEPENDS:perl-module-net-smtp += "perl-module-socket" +RDEPENDS:perl-module-net-smtp += "perl-module-strict" +RDEPENDS:perl-module-net-smtp += "perl-module-warnings" +RDEPENDS:perl-module-net-time += "perl-module-exporter" +RDEPENDS:perl-module-net-time += "perl-module-io-select" +RDEPENDS:perl-module-net-time += "perl-module-io-socket" +RDEPENDS:perl-module-net-time += "perl-module-net-config" +RDEPENDS:perl-module-net-time += "perl-module-strict" +RDEPENDS:perl-module-net-time += "perl-module-warnings" +RDEPENDS:perl-module-next += "perl-module-overload" +RDEPENDS:perl-module-next += "perl-module-strict" +RDEPENDS:perl-module-next += "perl-module-warnings" +RDEPENDS:perl-module-ok += "perl-module-strict" +RDEPENDS:perl-module-ok += "perl-module-test-more" +RDEPENDS:perl-module-opcode += "perl-module-exporter" +RDEPENDS:perl-module-opcode += "perl-module-strict" +RDEPENDS:perl-module-opcode += "perl-module-subs" +RDEPENDS:perl-module-opcode += "perl-module-xsloader" +RDEPENDS:perl-module-open += "perl-module-encode" +RDEPENDS:perl-module-open += "perl-module-encoding" +RDEPENDS:perl-module-open += "perl-module-warnings" +RDEPENDS:perl-module-o += "perl-module-b" +RDEPENDS:perl-module-ops += "perl-module-opcode" +RDEPENDS:perl-module-overloading += "perl-module-overload-numbers" +RDEPENDS:perl-module-overloading += "perl-module-warnings" +RDEPENDS:perl-module-overload += "perl-module-mro" +RDEPENDS:perl-module-overload += "perl-module-strict" +RDEPENDS:perl-module-overload += "perl-module-warnings-register" +RDEPENDS:perl-module-params-check += "perl-module-exporter" +RDEPENDS:perl-module-params-check += "perl-module-locale-maketext-simple" +RDEPENDS:perl-module-params-check += "perl-module-strict" +RDEPENDS:perl-module-params-check += "perl-module-vars" +RDEPENDS:perl-module-parent += "perl-module-strict" +RDEPENDS:perl-module-perlfaq += "perl-module-strict" +RDEPENDS:perl-module-perlfaq += "perl-module-warnings" +RDEPENDS:perl-module-perlio-encoding += "perl-module-strict" +RDEPENDS:perl-module-perlio-encoding += "perl-module-xsloader" +RDEPENDS:perl-module-perlio-mmap += "perl-module-strict" +RDEPENDS:perl-module-perlio-mmap += "perl-module-warnings" +RDEPENDS:perl-module-perlio-mmap += "perl-module-xsloader" +RDEPENDS:perl-module-perlio-scalar += "perl-module-xsloader" +RDEPENDS:perl-module-perlio-via += "perl-module-xsloader" +RDEPENDS:perl-module-perlio-via-quotedprint += "perl-module-mime-quotedprint" +RDEPENDS:perl-module-perlio-via-quotedprint += "perl-module-strict" +RDEPENDS:perl-module-pod-checker += "perl-module-base" +RDEPENDS:perl-module-pod-checker += "perl-module-exporter" +RDEPENDS:perl-module-pod-checker += "perl-module-strict" +RDEPENDS:perl-module-pod-checker += "perl-module-warnings" +RDEPENDS:perl-module-pod-escapes += "perl-module-exporter" +RDEPENDS:perl-module-pod-escapes += "perl-module-strict" +RDEPENDS:perl-module-pod-escapes += "perl-module-vars" +RDEPENDS:perl-module-pod-escapes += "perl-module-warnings" +RDEPENDS:perl-module-pod-functions += "perl-module-exporter" +RDEPENDS:perl-module-pod-functions += "perl-module-strict" +RDEPENDS:perl-module-pod-man += "perl-module-file-basename" +RDEPENDS:perl-module-pod-man += "perl-module-pod-simple" +RDEPENDS:perl-module-pod-man += "perl-module-strict" +RDEPENDS:perl-module-pod-man += "perl-module-subs" +RDEPENDS:perl-module-pod-man += "perl-module-vars" +RDEPENDS:perl-module-pod-man += "perl-module-warnings" +RDEPENDS:perl-module-pod-parselink += "perl-module-exporter" +RDEPENDS:perl-module-pod-parselink += "perl-module-strict" +RDEPENDS:perl-module-pod-parselink += "perl-module-vars" +RDEPENDS:perl-module-pod-parselink += "perl-module-warnings" +RDEPENDS:perl-module-pod-perldoc-baseto += "perl-module-config" +RDEPENDS:perl-module-pod-perldoc-baseto += "perl-module-strict" +RDEPENDS:perl-module-pod-perldoc-baseto += "perl-module-vars" +RDEPENDS:perl-module-pod-perldoc-baseto += "perl-module-warnings" +RDEPENDS:perl-module-pod-perldoc-getoptsoo += "perl-module-strict" +RDEPENDS:perl-module-pod-perldoc-getoptsoo += "perl-module-vars" +RDEPENDS:perl-module-pod-perldoc += "perl-module-config" +RDEPENDS:perl-module-pod-perldoc += "perl-module-encode" +RDEPENDS:perl-module-pod-perldoc += "perl-module-fcntl" +RDEPENDS:perl-module-pod-perldoc += "perl-module-file-basename" +RDEPENDS:perl-module-pod-perldoc += "perl-module-file-temp" +RDEPENDS:perl-module-pod-perldoc += "perl-module-pod-perldoc-getoptsoo" +RDEPENDS:perl-module-pod-perldoc += "perl-module-strict" +RDEPENDS:perl-module-pod-perldoc += "perl-module-text-parsewords" +RDEPENDS:perl-module-pod-perldoc += "perl-module-vars" +RDEPENDS:perl-module-pod-perldoc += "perl-module-warnings" +RDEPENDS:perl-module-pod-perldoc-toansi += "perl-module-parent" +RDEPENDS:perl-module-pod-perldoc-toansi += "perl-module-pod-text-color" +RDEPENDS:perl-module-pod-perldoc-toansi += "perl-module-strict" +RDEPENDS:perl-module-pod-perldoc-toansi += "perl-module-vars" +RDEPENDS:perl-module-pod-perldoc-toansi += "perl-module-warnings" +RDEPENDS:perl-module-pod-perldoc-tochecker += "perl-module-pod-checker" +RDEPENDS:perl-module-pod-perldoc-tochecker += "perl-module-strict" +RDEPENDS:perl-module-pod-perldoc-tochecker += "perl-module-vars" +RDEPENDS:perl-module-pod-perldoc-tochecker += "perl-module-warnings" +RDEPENDS:perl-module-pod-perldoc-toman += "perl-module-encode" +RDEPENDS:perl-module-pod-perldoc-toman += "perl-module-io-handle" +RDEPENDS:perl-module-pod-perldoc-toman += "perl-module-io-select" +RDEPENDS:perl-module-pod-perldoc-toman += "perl-module-ipc-open3" +RDEPENDS:perl-module-pod-perldoc-toman += "perl-module-parent" +RDEPENDS:perl-module-pod-perldoc-toman += "perl-module-pod-man" +RDEPENDS:perl-module-pod-perldoc-toman += "perl-module-pod-perldoc-topod" +RDEPENDS:perl-module-pod-perldoc-toman += "perl-module-strict" +RDEPENDS:perl-module-pod-perldoc-toman += "perl-module-vars" +RDEPENDS:perl-module-pod-perldoc-toman += "perl-module-warnings" +RDEPENDS:perl-module-pod-perldoc-tonroff += "perl-module-parent" +RDEPENDS:perl-module-pod-perldoc-tonroff += "perl-module-pod-man" +RDEPENDS:perl-module-pod-perldoc-tonroff += "perl-module-strict" +RDEPENDS:perl-module-pod-perldoc-tonroff += "perl-module-vars" +RDEPENDS:perl-module-pod-perldoc-tonroff += "perl-module-warnings" +RDEPENDS:perl-module-pod-perldoc-topod += "perl-module-parent" +RDEPENDS:perl-module-pod-perldoc-topod += "perl-module-strict" +RDEPENDS:perl-module-pod-perldoc-topod += "perl-module-vars" +RDEPENDS:perl-module-pod-perldoc-topod += "perl-module-warnings" +RDEPENDS:perl-module-pod-perldoc-tortf += "perl-module-parent" +RDEPENDS:perl-module-pod-perldoc-tortf += "perl-module-strict" +RDEPENDS:perl-module-pod-perldoc-tortf += "perl-module-vars" +RDEPENDS:perl-module-pod-perldoc-tortf += "perl-module-warnings" +RDEPENDS:perl-module-pod-perldoc-toterm += "perl-module-parent" +RDEPENDS:perl-module-pod-perldoc-toterm += "perl-module-pod-text-termcap" +RDEPENDS:perl-module-pod-perldoc-toterm += "perl-module-strict" +RDEPENDS:perl-module-pod-perldoc-toterm += "perl-module-vars" +RDEPENDS:perl-module-pod-perldoc-toterm += "perl-module-warnings" +RDEPENDS:perl-module-pod-perldoc-totext += "perl-module-parent" +RDEPENDS:perl-module-pod-perldoc-totext += "perl-module-pod-text" +RDEPENDS:perl-module-pod-perldoc-totext += "perl-module-strict" +RDEPENDS:perl-module-pod-perldoc-totext += "perl-module-vars" +RDEPENDS:perl-module-pod-perldoc-totext += "perl-module-warnings" +RDEPENDS:perl-module-pod-perldoc-toxml += "perl-module-parent" +RDEPENDS:perl-module-pod-perldoc-toxml += "perl-module-strict" +RDEPENDS:perl-module-pod-perldoc-toxml += "perl-module-vars" +RDEPENDS:perl-module-pod-perldoc-toxml += "perl-module-warnings" +RDEPENDS:perl-module-pod-simple-blackbox += "perl-module-if" +RDEPENDS:perl-module-pod-simple-blackbox += "perl-module-integer" +RDEPENDS:perl-module-pod-simple-blackbox += "perl-module-pod-simple" +RDEPENDS:perl-module-pod-simple-blackbox += "perl-module-pod-simple-transcode" +RDEPENDS:perl-module-pod-simple-blackbox += "perl-module-strict" +RDEPENDS:perl-module-pod-simple-blackbox += "perl-module-vars" +RDEPENDS:perl-module-pod-simple-checker += "perl-module-pod-simple" +RDEPENDS:perl-module-pod-simple-checker += "perl-module-pod-simple-methody" +RDEPENDS:perl-module-pod-simple-checker += "perl-module-strict" +RDEPENDS:perl-module-pod-simple-checker += "perl-module-text-wrap" +RDEPENDS:perl-module-pod-simple-checker += "perl-module-vars" +RDEPENDS:perl-module-pod-simple-debug += "perl-module-pod-simple" +RDEPENDS:perl-module-pod-simple-debug += "perl-module-strict" +RDEPENDS:perl-module-pod-simple-debug += "perl-module-vars" +RDEPENDS:perl-module-pod-simple-dumpastext += "perl-module-pod-simple" +RDEPENDS:perl-module-pod-simple-dumpastext += "perl-module-strict" +RDEPENDS:perl-module-pod-simple-dumpasxml += "perl-module-pod-simple" +RDEPENDS:perl-module-pod-simple-dumpasxml += "perl-module-strict" +RDEPENDS:perl-module-pod-simple-dumpasxml += "perl-module-text-wrap" +RDEPENDS:perl-module-pod-simple-justpod += "perl-module-pod-simple-methody" +RDEPENDS:perl-module-pod-simple-justpod += "perl-module-strict" +RDEPENDS:perl-module-pod-simple-justpod += "perl-module-warnings" +RDEPENDS:perl-module-pod-simple-linksection += "perl-module-overload" +RDEPENDS:perl-module-pod-simple-linksection += "perl-module-pod-simple-blackbox" +RDEPENDS:perl-module-pod-simple-linksection += "perl-module-strict" +RDEPENDS:perl-module-pod-simple-linksection += "perl-module-vars" +RDEPENDS:perl-module-pod-simple-methody += "perl-module-pod-simple" +RDEPENDS:perl-module-pod-simple-methody += "perl-module-strict" +RDEPENDS:perl-module-pod-simple-methody += "perl-module-vars" +RDEPENDS:perl-module-pod-simple += "perl-module-integer" +RDEPENDS:perl-module-pod-simple += "perl-module-pod-escapes" +RDEPENDS:perl-module-pod-simple += "perl-module-pod-simple-blackbox" +RDEPENDS:perl-module-pod-simple += "perl-module-pod-simple-linksection" +RDEPENDS:perl-module-pod-simple += "perl-module-pod-simple-tiedoutfh" +RDEPENDS:perl-module-pod-simple += "perl-module-strict" +RDEPENDS:perl-module-pod-simple += "perl-module-vars" +RDEPENDS:perl-module-pod-simple-progress += "perl-module-strict" +RDEPENDS:perl-module-pod-simple-pullparserendtoken += "perl-module-pod-simple-pullparsertoken" +RDEPENDS:perl-module-pod-simple-pullparserendtoken += "perl-module-strict" +RDEPENDS:perl-module-pod-simple-pullparserendtoken += "perl-module-vars" +RDEPENDS:perl-module-pod-simple-pullparser += "perl-module-pod-simple" +RDEPENDS:perl-module-pod-simple-pullparser += "perl-module-pod-simple-pullparserendtoken" +RDEPENDS:perl-module-pod-simple-pullparser += "perl-module-pod-simple-pullparserstarttoken" +RDEPENDS:perl-module-pod-simple-pullparser += "perl-module-pod-simple-pullparsertexttoken" +RDEPENDS:perl-module-pod-simple-pullparser += "perl-module-strict" +RDEPENDS:perl-module-pod-simple-pullparserstarttoken += "perl-module-pod-simple-pullparsertoken" +RDEPENDS:perl-module-pod-simple-pullparserstarttoken += "perl-module-strict" +RDEPENDS:perl-module-pod-simple-pullparserstarttoken += "perl-module-vars" +RDEPENDS:perl-module-pod-simple-pullparsertexttoken += "perl-module-pod-simple-pullparsertoken" +RDEPENDS:perl-module-pod-simple-pullparsertexttoken += "perl-module-strict" +RDEPENDS:perl-module-pod-simple-pullparsertexttoken += "perl-module-vars" +RDEPENDS:perl-module-pod-simple-pullparsertoken += "perl-module-strict" +RDEPENDS:perl-module-pod-simple-rtf += "perl-module-if" +RDEPENDS:perl-module-pod-simple-rtf += "perl-module-integer" +RDEPENDS:perl-module-pod-simple-rtf += "perl-module-pod-simple-pullparser" +RDEPENDS:perl-module-pod-simple-rtf += "perl-module-strict" +RDEPENDS:perl-module-pod-simple-rtf += "perl-module-vars" +RDEPENDS:perl-module-pod-simple-search += "perl-module-config" +RDEPENDS:perl-module-pod-simple-search += "perl-module-cwd" +RDEPENDS:perl-module-pod-simple-search += "perl-module-file-basename" +RDEPENDS:perl-module-pod-simple-search += "perl-module-strict" +RDEPENDS:perl-module-pod-simple-search += "perl-module-vars" +RDEPENDS:perl-module-pod-simple-simpletree += "perl-module-pod-simple" +RDEPENDS:perl-module-pod-simple-simpletree += "perl-module-strict" +RDEPENDS:perl-module-pod-simple-simpletree += "perl-module-vars" +RDEPENDS:perl-module-pod-simple-textcontent += "perl-module-pod-simple" +RDEPENDS:perl-module-pod-simple-textcontent += "perl-module-strict" +RDEPENDS:perl-module-pod-simple-textcontent += "perl-module-vars" +RDEPENDS:perl-module-pod-simple-text += "perl-module-pod-simple" +RDEPENDS:perl-module-pod-simple-text += "perl-module-pod-simple-methody" +RDEPENDS:perl-module-pod-simple-text += "perl-module-strict" +RDEPENDS:perl-module-pod-simple-text += "perl-module-text-wrap" +RDEPENDS:perl-module-pod-simple-text += "perl-module-vars" +RDEPENDS:perl-module-pod-simple-tiedoutfh += "perl-module-strict" +RDEPENDS:perl-module-pod-simple-tiedoutfh += "perl-module-vars" +RDEPENDS:perl-module-pod-simple-transcodedumb += "perl-module-strict" +RDEPENDS:perl-module-pod-simple-transcodedumb += "perl-module-vars" +RDEPENDS:perl-module-pod-simple-transcode += "perl-module-strict" +RDEPENDS:perl-module-pod-simple-transcode += "perl-module-vars" +RDEPENDS:perl-module-pod-simple-transcodesmart += "perl-module-encode" +RDEPENDS:perl-module-pod-simple-transcodesmart += "perl-module-pod-simple" +RDEPENDS:perl-module-pod-simple-transcodesmart += "perl-module-strict" +RDEPENDS:perl-module-pod-simple-transcodesmart += "perl-module-vars" +RDEPENDS:perl-module-pod-simple-xmloutstream += "perl-module-pod-simple" +RDEPENDS:perl-module-pod-simple-xmloutstream += "perl-module-strict" +RDEPENDS:perl-module-pod-simple-xmloutstream += "perl-module-vars" +RDEPENDS:perl-module-pod-text-color += "perl-module-pod-text" +RDEPENDS:perl-module-pod-text-color += "perl-module-strict" +RDEPENDS:perl-module-pod-text-color += "perl-module-term-ansicolor" +RDEPENDS:perl-module-pod-text-color += "perl-module-vars" +RDEPENDS:perl-module-pod-text-color += "perl-module-warnings" +RDEPENDS:perl-module-pod-text-overstrike += "perl-module-pod-text" +RDEPENDS:perl-module-pod-text-overstrike += "perl-module-strict" +RDEPENDS:perl-module-pod-text-overstrike += "perl-module-vars" +RDEPENDS:perl-module-pod-text-overstrike += "perl-module-warnings" +RDEPENDS:perl-module-pod-text += "perl-module-encode" +RDEPENDS:perl-module-pod-text += "perl-module-exporter" +RDEPENDS:perl-module-pod-text += "perl-module-pod-simple" +RDEPENDS:perl-module-pod-text += "perl-module-strict" +RDEPENDS:perl-module-pod-text += "perl-module-vars" +RDEPENDS:perl-module-pod-text += "perl-module-warnings" +RDEPENDS:perl-module-pod-text-termcap += "perl-module-pod-text" +RDEPENDS:perl-module-pod-text-termcap += "perl-module-posix" +RDEPENDS:perl-module-pod-text-termcap += "perl-module-strict" +RDEPENDS:perl-module-pod-text-termcap += "perl-module-term-cap" +RDEPENDS:perl-module-pod-text-termcap += "perl-module-vars" +RDEPENDS:perl-module-pod-text-termcap += "perl-module-warnings" +RDEPENDS:perl-module-pod-usage += "perl-module-config" +RDEPENDS:perl-module-pod-usage += "perl-module-exporter" +RDEPENDS:perl-module-pod-usage += "perl-module-strict" +RDEPENDS:perl-module-posix += "perl-module-exporter" +RDEPENDS:perl-module-posix += "perl-module-fcntl" +RDEPENDS:perl-module-posix += "perl-module-strict" +RDEPENDS:perl-module-posix += "perl-module-tie-hash" +RDEPENDS:perl-module-posix += "perl-module-warnings" +RDEPENDS:perl-module-posix += "perl-module-xsloader" +RDEPENDS:perl-module-re += "perl-module-exporter" +RDEPENDS:perl-module-re += "perl-module-strict" +RDEPENDS:perl-module-re += "perl-module-term-cap" +RDEPENDS:perl-module-re += "perl-module-warnings" +RDEPENDS:perl-module-re += "perl-module-xsloader" +RDEPENDS:perl-module-safe += "perl-module-b" +RDEPENDS:perl-module-safe += "perl-module-opcode" +RDEPENDS:perl-module-safe += "perl-module-strict" +RDEPENDS:perl-module-safe += "perl-module-utf8" +RDEPENDS:perl-module-sdbm-file += "perl-module-exporter" +RDEPENDS:perl-module-sdbm-file += "perl-module-strict" +RDEPENDS:perl-module-sdbm-file += "perl-module-tie-hash" +RDEPENDS:perl-module-sdbm-file += "perl-module-warnings" +RDEPENDS:perl-module-sdbm-file += "perl-module-xsloader" +RDEPENDS:perl-module-search-dict += "perl-module-exporter" +RDEPENDS:perl-module-search-dict += "perl-module-feature" +RDEPENDS:perl-module-search-dict += "perl-module-strict" +RDEPENDS:perl-module-selfloader += "perl-module-exporter" +RDEPENDS:perl-module-selfloader += "perl-module-io-handle" +RDEPENDS:perl-module-selfloader += "perl-module-strict" +RDEPENDS:perl-module-socket += "perl-module-exporter" +RDEPENDS:perl-module-socket += "perl-module-strict" +RDEPENDS:perl-module-socket += "perl-module-warnings-register" +RDEPENDS:perl-module-socket += "perl-module-xsloader" +RDEPENDS:perl-module-sort += "perl-module-strict" +RDEPENDS:perl-module-sort += "perl-module-warnings" +RDEPENDS:perl-module-storable += "perl-module-exporter" +RDEPENDS:perl-module-storable += "perl-module-io-file" +RDEPENDS:perl-module-subs += "perl-module-strict" +RDEPENDS:perl-module-subs += "perl-module-warnings" +RDEPENDS:perl-module-sub-util += "perl-module-exporter" +RDEPENDS:perl-module-sub-util += "perl-module-list-util" +RDEPENDS:perl-module-sub-util += "perl-module-strict" +RDEPENDS:perl-module-sub-util += "perl-module-warnings" +RDEPENDS:perl-module-sys-hostname += "perl-module-exporter" +RDEPENDS:perl-module-sys-hostname += "perl-module-posix" +RDEPENDS:perl-module-sys-hostname += "perl-module-strict" +RDEPENDS:perl-module-sys-hostname += "perl-module-warnings" +RDEPENDS:perl-module-sys-hostname += "perl-module-xsloader" +RDEPENDS:perl-module-sys-syslog += "perl-module-config" +RDEPENDS:perl-module-sys-syslog += "perl-module-constant" +RDEPENDS:perl-module-sys-syslog += "perl-module-dynaloader" +RDEPENDS:perl-module-sys-syslog += "perl-module-exporter" +RDEPENDS:perl-module-sys-syslog += "perl-module-fcntl" +RDEPENDS:perl-module-sys-syslog += "perl-module-file-basename" +RDEPENDS:perl-module-sys-syslog += "perl-module-posix" +RDEPENDS:perl-module-sys-syslog += "perl-module-socket" +RDEPENDS:perl-module-sys-syslog += "perl-module-strict" +RDEPENDS:perl-module-sys-syslog += "perl-module-sys-hostname" +RDEPENDS:perl-module-sys-syslog += "perl-module-vars" +RDEPENDS:perl-module-sys-syslog += "perl-module-warnings" +RDEPENDS:perl-module-sys-syslog += "perl-module-warnings-register" +RDEPENDS:perl-module-sys-syslog += "perl-module-xsloader" +RDEPENDS:perl-module-tap-base += "perl-module-base" +RDEPENDS:perl-module-tap-base += "perl-module-constant" +RDEPENDS:perl-module-tap-base += "perl-module-strict" +RDEPENDS:perl-module-tap-base += "perl-module-warnings" +RDEPENDS:perl-module-tap-formatter-base += "perl-module-base" +RDEPENDS:perl-module-tap-formatter-base += "perl-module-config" +RDEPENDS:perl-module-tap-formatter-base += "perl-module-posix" +RDEPENDS:perl-module-tap-formatter-base += "perl-module-strict" +RDEPENDS:perl-module-tap-formatter-base += "perl-module-tap-formatter-color" +RDEPENDS:perl-module-tap-formatter-base += "perl-module-warnings" +RDEPENDS:perl-module-tap-formatter-color += "perl-module-base" +RDEPENDS:perl-module-tap-formatter-color += "perl-module-constant" +RDEPENDS:perl-module-tap-formatter-color += "perl-module-strict" +RDEPENDS:perl-module-tap-formatter-color += "perl-module-warnings" +RDEPENDS:perl-module-tap-formatter-console-parallelsession += "perl-module-base" +RDEPENDS:perl-module-tap-formatter-console-parallelsession += "perl-module-constant" +RDEPENDS:perl-module-tap-formatter-console-parallelsession += "perl-module-file-path" +RDEPENDS:perl-module-tap-formatter-console-parallelsession += "perl-module-strict" +RDEPENDS:perl-module-tap-formatter-console-parallelsession += "perl-module-warnings" +RDEPENDS:perl-module-tap-formatter-console += "perl-module-base" +RDEPENDS:perl-module-tap-formatter-console += "perl-module-posix" +RDEPENDS:perl-module-tap-formatter-console += "perl-module-strict" +RDEPENDS:perl-module-tap-formatter-console += "perl-module-warnings" +RDEPENDS:perl-module-tap-formatter-console-session += "perl-module-base" +RDEPENDS:perl-module-tap-formatter-console-session += "perl-module-strict" +RDEPENDS:perl-module-tap-formatter-console-session += "perl-module-warnings" +RDEPENDS:perl-module-tap-formatter-file += "perl-module-base" +RDEPENDS:perl-module-tap-formatter-file += "perl-module-posix" +RDEPENDS:perl-module-tap-formatter-file += "perl-module-strict" +RDEPENDS:perl-module-tap-formatter-file += "perl-module-tap-formatter-file-session" +RDEPENDS:perl-module-tap-formatter-file += "perl-module-warnings" +RDEPENDS:perl-module-tap-formatter-file-session += "perl-module-base" +RDEPENDS:perl-module-tap-formatter-file-session += "perl-module-strict" +RDEPENDS:perl-module-tap-formatter-file-session += "perl-module-warnings" +RDEPENDS:perl-module-tap-formatter-session += "perl-module-base" +RDEPENDS:perl-module-tap-formatter-session += "perl-module-strict" +RDEPENDS:perl-module-tap-formatter-session += "perl-module-warnings" +RDEPENDS:perl-module-tap-harness-env += "perl-module-constant" +RDEPENDS:perl-module-tap-harness-env += "perl-module-strict" +RDEPENDS:perl-module-tap-harness-env += "perl-module-tap-object" +RDEPENDS:perl-module-tap-harness-env += "perl-module-text-parsewords" +RDEPENDS:perl-module-tap-harness-env += "perl-module-warnings" +RDEPENDS:perl-module-tap-harness += "perl-module-base" +RDEPENDS:perl-module-tap-harness += "perl-module-file-path" +RDEPENDS:perl-module-tap-harness += "perl-module-io-handle" +RDEPENDS:perl-module-tap-harness += "perl-module-strict" +RDEPENDS:perl-module-tap-harness += "perl-module-warnings" +RDEPENDS:perl-module-tap-object += "perl-module-strict" +RDEPENDS:perl-module-tap-object += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-aggregator += "perl-module-base" +RDEPENDS:perl-module-tap-parser-aggregator += "perl-module-benchmark" +RDEPENDS:perl-module-tap-parser-aggregator += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-aggregator += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-grammar += "perl-module-base" +RDEPENDS:perl-module-tap-parser-grammar += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-grammar += "perl-module-tap-parser-resultfactory" +RDEPENDS:perl-module-tap-parser-grammar += "perl-module-tap-parser-yamlish-reader" +RDEPENDS:perl-module-tap-parser-grammar += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-iterator-array += "perl-module-base" +RDEPENDS:perl-module-tap-parser-iterator-array += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-iterator-array += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-iteratorfactory += "perl-module-base" +RDEPENDS:perl-module-tap-parser-iteratorfactory += "perl-module-constant" +RDEPENDS:perl-module-tap-parser-iteratorfactory += "perl-module-file-basename" +RDEPENDS:perl-module-tap-parser-iteratorfactory += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-iteratorfactory += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-iterator += "perl-module-base" +RDEPENDS:perl-module-tap-parser-iterator += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-iterator += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-iterator-process += "perl-module-base" +RDEPENDS:perl-module-tap-parser-iterator-process += "perl-module-config" +RDEPENDS:perl-module-tap-parser-iterator-process += "perl-module-io-handle" +RDEPENDS:perl-module-tap-parser-iterator-process += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-iterator-process += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-iterator-stream += "perl-module-base" +RDEPENDS:perl-module-tap-parser-iterator-stream += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-iterator-stream += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-multiplexer += "perl-module-base" +RDEPENDS:perl-module-tap-parser-multiplexer += "perl-module-constant" +RDEPENDS:perl-module-tap-parser-multiplexer += "perl-module-errno" +RDEPENDS:perl-module-tap-parser-multiplexer += "perl-module-io-select" +RDEPENDS:perl-module-tap-parser-multiplexer += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-multiplexer += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser += "perl-module-base" +RDEPENDS:perl-module-tap-parser += "perl-module-strict" +RDEPENDS:perl-module-tap-parser += "perl-module-tap-parser-grammar" +RDEPENDS:perl-module-tap-parser += "perl-module-tap-parser-iterator" +RDEPENDS:perl-module-tap-parser += "perl-module-tap-parser-iteratorfactory" +RDEPENDS:perl-module-tap-parser += "perl-module-tap-parser-result" +RDEPENDS:perl-module-tap-parser += "perl-module-tap-parser-resultfactory" +RDEPENDS:perl-module-tap-parser += "perl-module-tap-parser-source" +RDEPENDS:perl-module-tap-parser += "perl-module-tap-parser-sourcehandler-executable" +RDEPENDS:perl-module-tap-parser += "perl-module-tap-parser-sourcehandler-file" +RDEPENDS:perl-module-tap-parser += "perl-module-tap-parser-sourcehandler-handle" +RDEPENDS:perl-module-tap-parser += "perl-module-tap-parser-sourcehandler-perl" +RDEPENDS:perl-module-tap-parser += "perl-module-tap-parser-sourcehandler-rawtap" +RDEPENDS:perl-module-tap-parser += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-result-bailout += "perl-module-base" +RDEPENDS:perl-module-tap-parser-result-bailout += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-result-bailout += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-result-comment += "perl-module-base" +RDEPENDS:perl-module-tap-parser-result-comment += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-result-comment += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-resultfactory += "perl-module-base" +RDEPENDS:perl-module-tap-parser-resultfactory += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-resultfactory += "perl-module-tap-parser-result-bailout" +RDEPENDS:perl-module-tap-parser-resultfactory += "perl-module-tap-parser-result-comment" +RDEPENDS:perl-module-tap-parser-resultfactory += "perl-module-tap-parser-result-plan" +RDEPENDS:perl-module-tap-parser-resultfactory += "perl-module-tap-parser-result-pragma" +RDEPENDS:perl-module-tap-parser-resultfactory += "perl-module-tap-parser-result-test" +RDEPENDS:perl-module-tap-parser-resultfactory += "perl-module-tap-parser-result-unknown" +RDEPENDS:perl-module-tap-parser-resultfactory += "perl-module-tap-parser-result-version" +RDEPENDS:perl-module-tap-parser-resultfactory += "perl-module-tap-parser-result-yaml" +RDEPENDS:perl-module-tap-parser-resultfactory += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-result += "perl-module-base" +RDEPENDS:perl-module-tap-parser-result += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-result += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-result-plan += "perl-module-base" +RDEPENDS:perl-module-tap-parser-result-plan += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-result-plan += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-result-pragma += "perl-module-base" +RDEPENDS:perl-module-tap-parser-result-pragma += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-result-pragma += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-result-test += "perl-module-base" +RDEPENDS:perl-module-tap-parser-result-test += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-result-test += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-result-unknown += "perl-module-base" +RDEPENDS:perl-module-tap-parser-result-unknown += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-result-unknown += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-result-version += "perl-module-base" +RDEPENDS:perl-module-tap-parser-result-version += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-result-version += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-result-yaml += "perl-module-base" +RDEPENDS:perl-module-tap-parser-result-yaml += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-result-yaml += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-scheduler-job += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-scheduler-job += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-scheduler += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-scheduler += "perl-module-tap-parser-scheduler-job" +RDEPENDS:perl-module-tap-parser-scheduler += "perl-module-tap-parser-scheduler-spinner" +RDEPENDS:perl-module-tap-parser-scheduler += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-scheduler-spinner += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-scheduler-spinner += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-sourcehandler-executable += "perl-module-base" +RDEPENDS:perl-module-tap-parser-sourcehandler-executable += "perl-module-constant" +RDEPENDS:perl-module-tap-parser-sourcehandler-executable += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-sourcehandler-executable += "perl-module-tap-parser-iteratorfactory" +RDEPENDS:perl-module-tap-parser-sourcehandler-executable += "perl-module-tap-parser-iterator-process" +RDEPENDS:perl-module-tap-parser-sourcehandler-executable += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-sourcehandler-file += "perl-module-base" +RDEPENDS:perl-module-tap-parser-sourcehandler-file += "perl-module-constant" +RDEPENDS:perl-module-tap-parser-sourcehandler-file += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-sourcehandler-file += "perl-module-tap-parser-iteratorfactory" +RDEPENDS:perl-module-tap-parser-sourcehandler-file += "perl-module-tap-parser-iterator-stream" +RDEPENDS:perl-module-tap-parser-sourcehandler-file += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-sourcehandler-handle += "perl-module-base" +RDEPENDS:perl-module-tap-parser-sourcehandler-handle += "perl-module-constant" +RDEPENDS:perl-module-tap-parser-sourcehandler-handle += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-sourcehandler-handle += "perl-module-tap-parser-iteratorfactory" +RDEPENDS:perl-module-tap-parser-sourcehandler-handle += "perl-module-tap-parser-iterator-stream" +RDEPENDS:perl-module-tap-parser-sourcehandler-handle += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-sourcehandler += "perl-module-base" +RDEPENDS:perl-module-tap-parser-sourcehandler += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-sourcehandler += "perl-module-tap-parser-iterator" +RDEPENDS:perl-module-tap-parser-sourcehandler += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-sourcehandler-perl += "perl-module-base" +RDEPENDS:perl-module-tap-parser-sourcehandler-perl += "perl-module-config" +RDEPENDS:perl-module-tap-parser-sourcehandler-perl += "perl-module-constant" +RDEPENDS:perl-module-tap-parser-sourcehandler-perl += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-sourcehandler-perl += "perl-module-tap-parser-iteratorfactory" +RDEPENDS:perl-module-tap-parser-sourcehandler-perl += "perl-module-tap-parser-iterator-process" +RDEPENDS:perl-module-tap-parser-sourcehandler-perl += "perl-module-text-parsewords" +RDEPENDS:perl-module-tap-parser-sourcehandler-perl += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-sourcehandler-rawtap += "perl-module-base" +RDEPENDS:perl-module-tap-parser-sourcehandler-rawtap += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-sourcehandler-rawtap += "perl-module-tap-parser-iterator-array" +RDEPENDS:perl-module-tap-parser-sourcehandler-rawtap += "perl-module-tap-parser-iteratorfactory" +RDEPENDS:perl-module-tap-parser-sourcehandler-rawtap += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-source += "perl-module-base" +RDEPENDS:perl-module-tap-parser-source += "perl-module-constant" +RDEPENDS:perl-module-tap-parser-source += "perl-module-file-basename" +RDEPENDS:perl-module-tap-parser-source += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-source += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-yamlish-reader += "perl-module-base" +RDEPENDS:perl-module-tap-parser-yamlish-reader += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-yamlish-reader += "perl-module-warnings" +RDEPENDS:perl-module-tap-parser-yamlish-writer += "perl-module-base" +RDEPENDS:perl-module-tap-parser-yamlish-writer += "perl-module-strict" +RDEPENDS:perl-module-tap-parser-yamlish-writer += "perl-module-warnings" +RDEPENDS:perl-module-term-ansicolor += "perl-module-exporter" +RDEPENDS:perl-module-term-ansicolor += "perl-module-strict" +RDEPENDS:perl-module-term-ansicolor += "perl-module-warnings" +RDEPENDS:perl-module-term-cap += "perl-module-strict" +RDEPENDS:perl-module-term-cap += "perl-module-vars" +RDEPENDS:perl-module-term-complete += "perl-module-exporter" +RDEPENDS:perl-module-term-complete += "perl-module-strict" +RDEPENDS:perl-module-term-readline += "perl-module-strict" +RDEPENDS:perl-module-term-readline += "perl-module-term-cap" +RDEPENDS:perl-module-test2-api-breakage += "perl-module-strict" +RDEPENDS:perl-module-test2-api-breakage += "perl-module-test2-util" +RDEPENDS:perl-module-test2-api-breakage += "perl-module-warnings" +RDEPENDS:perl-module-test2-api-context += "perl-module-strict" +RDEPENDS:perl-module-test2-api-context += "perl-module-test2-api" +RDEPENDS:perl-module-test2-api-context += "perl-module-test2-eventfacet-trace" +RDEPENDS:perl-module-test2-api-context += "perl-module-test2-util" +RDEPENDS:perl-module-test2-api-context += "perl-module-test2-util-externalmeta" +RDEPENDS:perl-module-test2-api-context += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-api-context += "perl-module-warnings" +RDEPENDS:perl-module-test2-api-instance += "perl-module-strict" +RDEPENDS:perl-module-test2-api-instance += "perl-module-test2-api-stack" +RDEPENDS:perl-module-test2-api-instance += "perl-module-test2-eventfacet-trace" +RDEPENDS:perl-module-test2-api-instance += "perl-module-test2-util" +RDEPENDS:perl-module-test2-api-instance += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-api-instance += "perl-module-warnings" +RDEPENDS:perl-module-test2-api-interceptresult-event += "perl-module-list-util" +RDEPENDS:perl-module-test2-api-interceptresult-event += "perl-module-storable" +RDEPENDS:perl-module-test2-api-interceptresult-event += "perl-module-strict" +RDEPENDS:perl-module-test2-api-interceptresult-event += "perl-module-test2-api-interceptresult-facet" +RDEPENDS:perl-module-test2-api-interceptresult-event += "perl-module-test2-api-interceptresult-hub" +RDEPENDS:perl-module-test2-api-interceptresult-event += "perl-module-test2-util" +RDEPENDS:perl-module-test2-api-interceptresult-event += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-api-interceptresult-event += "perl-module-warnings" +RDEPENDS:perl-module-test2-api-interceptresult-facet += "perl-module-strict" +RDEPENDS:perl-module-test2-api-interceptresult-facet += "perl-module-test2-eventfacet" +RDEPENDS:perl-module-test2-api-interceptresult-facet += "perl-module-warnings" +RDEPENDS:perl-module-test2-api-interceptresult-hub += "perl-module-strict" +RDEPENDS:perl-module-test2-api-interceptresult-hub += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-api-interceptresult-hub += "perl-module-warnings" +RDEPENDS:perl-module-test2-api-interceptresult += "perl-module-storable" +RDEPENDS:perl-module-test2-api-interceptresult += "perl-module-strict" +RDEPENDS:perl-module-test2-api-interceptresult += "perl-module-test2-api-interceptresult-event" +RDEPENDS:perl-module-test2-api-interceptresult += "perl-module-test2-api-interceptresult-hub" +RDEPENDS:perl-module-test2-api-interceptresult += "perl-module-test2-api-interceptresult-squasher" +RDEPENDS:perl-module-test2-api-interceptresult += "perl-module-test2-util" +RDEPENDS:perl-module-test2-api-interceptresult += "perl-module-warnings" +RDEPENDS:perl-module-test2-api-interceptresult-squasher += "perl-module-list-util" +RDEPENDS:perl-module-test2-api-interceptresult-squasher += "perl-module-strict" +RDEPENDS:perl-module-test2-api-interceptresult-squasher += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-api-interceptresult-squasher += "perl-module-warnings" +RDEPENDS:perl-module-test2-api += "perl-module-strict" +RDEPENDS:perl-module-test2-api += "perl-module-test2-api-context" +RDEPENDS:perl-module-test2-api += "perl-module-test2-api-interceptresult" +RDEPENDS:perl-module-test2-api += "perl-module-test2-event-bail" +RDEPENDS:perl-module-test2-api += "perl-module-test2-event-diag" +RDEPENDS:perl-module-test2-api += "perl-module-test2-event-exception" +RDEPENDS:perl-module-test2-api += "perl-module-test2-eventfacet-trace" +RDEPENDS:perl-module-test2-api += "perl-module-test2-event-note" +RDEPENDS:perl-module-test2-api += "perl-module-test2-event-ok" +RDEPENDS:perl-module-test2-api += "perl-module-test2-event-plan" +RDEPENDS:perl-module-test2-api += "perl-module-test2-event-skip" +RDEPENDS:perl-module-test2-api += "perl-module-test2-event-subtest" +RDEPENDS:perl-module-test2-api += "perl-module-test2-event-waiting" +RDEPENDS:perl-module-test2-api += "perl-module-test2-hub-interceptor" +RDEPENDS:perl-module-test2-api += "perl-module-test2-hub-interceptor-terminator" +RDEPENDS:perl-module-test2-api += "perl-module-test2-hub-subtest" +RDEPENDS:perl-module-test2-api += "perl-module-test2-util" +RDEPENDS:perl-module-test2-api += "perl-module-test2-util-trace" +RDEPENDS:perl-module-test2-api += "perl-module-time-hires" +RDEPENDS:perl-module-test2-api += "perl-module-warnings" +RDEPENDS:perl-module-test2-api-stack += "perl-module-strict" +RDEPENDS:perl-module-test2-api-stack += "perl-module-test2-api" +RDEPENDS:perl-module-test2-api-stack += "perl-module-test2-hub" +RDEPENDS:perl-module-test2-api-stack += "perl-module-warnings" +RDEPENDS:perl-module-test2-event-bail += "perl-module-strict" +RDEPENDS:perl-module-test2-event-bail += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-event-bail += "perl-module-warnings" +RDEPENDS:perl-module-test2-event-diag += "perl-module-strict" +RDEPENDS:perl-module-test2-event-diag += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-event-diag += "perl-module-warnings" +RDEPENDS:perl-module-test2-event-encoding += "perl-module-strict" +RDEPENDS:perl-module-test2-event-encoding += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-event-encoding += "perl-module-warnings" +RDEPENDS:perl-module-test2-event-exception += "perl-module-strict" +RDEPENDS:perl-module-test2-event-exception += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-event-exception += "perl-module-warnings" +RDEPENDS:perl-module-test2-eventfacet-about += "perl-module-strict" +RDEPENDS:perl-module-test2-eventfacet-about += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-eventfacet-about += "perl-module-warnings" +RDEPENDS:perl-module-test2-eventfacet-amnesty += "perl-module-strict" +RDEPENDS:perl-module-test2-eventfacet-amnesty += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-eventfacet-amnesty += "perl-module-warnings" +RDEPENDS:perl-module-test2-eventfacet-assert += "perl-module-strict" +RDEPENDS:perl-module-test2-eventfacet-assert += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-eventfacet-assert += "perl-module-warnings" +RDEPENDS:perl-module-test2-eventfacet-control += "perl-module-strict" +RDEPENDS:perl-module-test2-eventfacet-control += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-eventfacet-control += "perl-module-warnings" +RDEPENDS:perl-module-test2-eventfacet-error += "perl-module-strict" +RDEPENDS:perl-module-test2-eventfacet-error += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-eventfacet-error += "perl-module-warnings" +RDEPENDS:perl-module-test2-eventfacet-hub += "perl-module-strict" +RDEPENDS:perl-module-test2-eventfacet-hub += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-eventfacet-hub += "perl-module-warnings" +RDEPENDS:perl-module-test2-eventfacet-info += "perl-module-strict" +RDEPENDS:perl-module-test2-eventfacet-info += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-eventfacet-info += "perl-module-warnings" +RDEPENDS:perl-module-test2-eventfacet-info-table += "perl-module-strict" +RDEPENDS:perl-module-test2-eventfacet-info-table += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-eventfacet-info-table += "perl-module-warnings" +RDEPENDS:perl-module-test2-eventfacet-meta += "perl-module-strict" +RDEPENDS:perl-module-test2-eventfacet-meta += "perl-module-vars" +RDEPENDS:perl-module-test2-eventfacet-meta += "perl-module-warnings" +RDEPENDS:perl-module-test2-eventfacet-parent += "perl-module-strict" +RDEPENDS:perl-module-test2-eventfacet-parent += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-eventfacet-parent += "perl-module-warnings" +RDEPENDS:perl-module-test2-eventfacet += "perl-module-strict" +RDEPENDS:perl-module-test2-eventfacet += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-eventfacet += "perl-module-warnings" +RDEPENDS:perl-module-test2-eventfacet-plan += "perl-module-strict" +RDEPENDS:perl-module-test2-eventfacet-plan += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-eventfacet-plan += "perl-module-warnings" +RDEPENDS:perl-module-test2-eventfacet-render += "perl-module-strict" +RDEPENDS:perl-module-test2-eventfacet-render += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-eventfacet-render += "perl-module-warnings" +RDEPENDS:perl-module-test2-eventfacet-trace += "perl-module-strict" +RDEPENDS:perl-module-test2-eventfacet-trace += "perl-module-test2-util" +RDEPENDS:perl-module-test2-eventfacet-trace += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-eventfacet-trace += "perl-module-warnings" +RDEPENDS:perl-module-test2-event-fail += "perl-module-strict" +RDEPENDS:perl-module-test2-event-fail += "perl-module-test2-event" +RDEPENDS:perl-module-test2-event-fail += "perl-module-test2-eventfacet-info" +RDEPENDS:perl-module-test2-event-fail += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-event-fail += "perl-module-warnings" +RDEPENDS:perl-module-test2-event-generic += "perl-module-strict" +RDEPENDS:perl-module-test2-event-generic += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-event-generic += "perl-module-warnings" +RDEPENDS:perl-module-test2-event-note += "perl-module-strict" +RDEPENDS:perl-module-test2-event-note += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-event-note += "perl-module-warnings" +RDEPENDS:perl-module-test2-event-ok += "perl-module-strict" +RDEPENDS:perl-module-test2-event-ok += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-event-ok += "perl-module-warnings" +RDEPENDS:perl-module-test2-event-pass += "perl-module-strict" +RDEPENDS:perl-module-test2-event-pass += "perl-module-test2-event" +RDEPENDS:perl-module-test2-event-pass += "perl-module-test2-eventfacet-info" +RDEPENDS:perl-module-test2-event-pass += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-event-pass += "perl-module-warnings" +RDEPENDS:perl-module-test2-event += "perl-module-strict" +RDEPENDS:perl-module-test2-event += "perl-module-test2-eventfacet-about" +RDEPENDS:perl-module-test2-event += "perl-module-test2-eventfacet-amnesty" +RDEPENDS:perl-module-test2-event += "perl-module-test2-eventfacet-assert" +RDEPENDS:perl-module-test2-event += "perl-module-test2-eventfacet-control" +RDEPENDS:perl-module-test2-event += "perl-module-test2-eventfacet-error" +RDEPENDS:perl-module-test2-event += "perl-module-test2-eventfacet-hub" +RDEPENDS:perl-module-test2-event += "perl-module-test2-eventfacet-info" +RDEPENDS:perl-module-test2-event += "perl-module-test2-eventfacet-meta" +RDEPENDS:perl-module-test2-event += "perl-module-test2-eventfacet-parent" +RDEPENDS:perl-module-test2-event += "perl-module-test2-eventfacet-plan" +RDEPENDS:perl-module-test2-event += "perl-module-test2-eventfacet-trace" +RDEPENDS:perl-module-test2-event += "perl-module-test2-util" +RDEPENDS:perl-module-test2-event += "perl-module-test2-util-externalmeta" +RDEPENDS:perl-module-test2-event += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-event += "perl-module-test2-util-trace" +RDEPENDS:perl-module-test2-event += "perl-module-warnings" +RDEPENDS:perl-module-test2-event-plan += "perl-module-strict" +RDEPENDS:perl-module-test2-event-plan += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-event-plan += "perl-module-warnings" +RDEPENDS:perl-module-test2-event-skip += "perl-module-strict" +RDEPENDS:perl-module-test2-event-skip += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-event-skip += "perl-module-warnings" +RDEPENDS:perl-module-test2-event-subtest += "perl-module-strict" +RDEPENDS:perl-module-test2-event-subtest += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-event-subtest += "perl-module-warnings" +RDEPENDS:perl-module-test2-event-tap-version += "perl-module-strict" +RDEPENDS:perl-module-test2-event-tap-version += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-event-tap-version += "perl-module-warnings" +RDEPENDS:perl-module-test2-event-v2 += "perl-module-strict" +RDEPENDS:perl-module-test2-event-v2 += "perl-module-test2-util-facets2legacy" +RDEPENDS:perl-module-test2-event-v2 += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-event-v2 += "perl-module-warnings" +RDEPENDS:perl-module-test2-event-waiting += "perl-module-strict" +RDEPENDS:perl-module-test2-event-waiting += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-event-waiting += "perl-module-warnings" +RDEPENDS:perl-module-test2-formatter += "perl-module-strict" +RDEPENDS:perl-module-test2-formatter += "perl-module-test2-api" +RDEPENDS:perl-module-test2-formatter += "perl-module-warnings" +RDEPENDS:perl-module-test2-formatter-tap += "perl-module-data-dumper" +RDEPENDS:perl-module-test2-formatter-tap += "perl-module-strict" +RDEPENDS:perl-module-test2-formatter-tap += "perl-module-test2-api" +RDEPENDS:perl-module-test2-formatter-tap += "perl-module-test2-util" +RDEPENDS:perl-module-test2-formatter-tap += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-formatter-tap += "perl-module-warnings" +RDEPENDS:perl-module-test2-hub-interceptor += "perl-module-strict" +RDEPENDS:perl-module-test2-hub-interceptor += "perl-module-test2-hub-interceptor-terminator" +RDEPENDS:perl-module-test2-hub-interceptor += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-hub-interceptor += "perl-module-warnings" +RDEPENDS:perl-module-test2-hub-interceptor-terminator += "perl-module-strict" +RDEPENDS:perl-module-test2-hub-interceptor-terminator += "perl-module-warnings" +RDEPENDS:perl-module-test2-hub += "perl-module-list-util" +RDEPENDS:perl-module-test2-hub += "perl-module-strict" +RDEPENDS:perl-module-test2-hub += "perl-module-test2-util" +RDEPENDS:perl-module-test2-hub += "perl-module-test2-util-externalmeta" +RDEPENDS:perl-module-test2-hub += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-hub += "perl-module-warnings" +RDEPENDS:perl-module-test2-hub-subtest += "perl-module-strict" +RDEPENDS:perl-module-test2-hub-subtest += "perl-module-test2-util" +RDEPENDS:perl-module-test2-hub-subtest += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-hub-subtest += "perl-module-warnings" +RDEPENDS:perl-module-test2-ipc-driver-files += "perl-module-data-dumper" +RDEPENDS:perl-module-test2-ipc-driver-files += "perl-module-file-temp" +RDEPENDS:perl-module-test2-ipc-driver-files += "perl-module-json-pp" +RDEPENDS:perl-module-test2-ipc-driver-files += "perl-module-posix" +RDEPENDS:perl-module-test2-ipc-driver-files += "perl-module-storable" +RDEPENDS:perl-module-test2-ipc-driver-files += "perl-module-strict" +RDEPENDS:perl-module-test2-ipc-driver-files += "perl-module-test2-api" +RDEPENDS:perl-module-test2-ipc-driver-files += "perl-module-test2-event-waiting" +RDEPENDS:perl-module-test2-ipc-driver-files += "perl-module-test2-util" +RDEPENDS:perl-module-test2-ipc-driver-files += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-ipc-driver-files += "perl-module-warnings" +RDEPENDS:perl-module-test2-ipc-driver += "perl-module-strict" +RDEPENDS:perl-module-test2-ipc-driver += "perl-module-test2-api" +RDEPENDS:perl-module-test2-ipc-driver += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test2-ipc-driver += "perl-module-warnings" +RDEPENDS:perl-module-test2-ipc += "perl-module-strict" +RDEPENDS:perl-module-test2-ipc += "perl-module-test2-api" +RDEPENDS:perl-module-test2-ipc += "perl-module-test2-api-instance" +RDEPENDS:perl-module-test2-ipc += "perl-module-test2-ipc-driver-files" +RDEPENDS:perl-module-test2-ipc += "perl-module-test2-util" +RDEPENDS:perl-module-test2-ipc += "perl-module-warnings" +RDEPENDS:perl-module-test2 += "perl-module-strict" +RDEPENDS:perl-module-test2 += "perl-module-warnings" +RDEPENDS:perl-module-test2-tools-tiny += "perl-module-data-dumper" +RDEPENDS:perl-module-test2-tools-tiny += "perl-module-strict" +RDEPENDS:perl-module-test2-tools-tiny += "perl-module-test2-api" +RDEPENDS:perl-module-test2-tools-tiny += "perl-module-test2-hub-interceptor" +RDEPENDS:perl-module-test2-tools-tiny += "perl-module-test2-hub-interceptor-terminator" +RDEPENDS:perl-module-test2-tools-tiny += "perl-module-test2-util" +RDEPENDS:perl-module-test2-tools-tiny += "perl-module-warnings" +RDEPENDS:perl-module-test2-util-externalmeta += "perl-module-strict" +RDEPENDS:perl-module-test2-util-externalmeta += "perl-module-warnings" +RDEPENDS:perl-module-test2-util-facets2legacy += "perl-module-base" +RDEPENDS:perl-module-test2-util-facets2legacy += "perl-module-strict" +RDEPENDS:perl-module-test2-util-facets2legacy += "perl-module-warnings" +RDEPENDS:perl-module-test2-util-hashbase += "perl-module-strict" +RDEPENDS:perl-module-test2-util-hashbase += "perl-module-warnings" +RDEPENDS:perl-module-test2-util += "perl-module-config" +RDEPENDS:perl-module-test2-util += "perl-module-posix" +RDEPENDS:perl-module-test2-util += "perl-module-strict" +RDEPENDS:perl-module-test2-util += "perl-module-warnings" +RDEPENDS:perl-module-test2-util-trace += "perl-module-strict" +RDEPENDS:perl-module-test2-util-trace += "perl-module-test2-eventfacet-trace" +RDEPENDS:perl-module-test2-util-trace += "perl-module-warnings" +RDEPENDS:perl-module-test-builder-formatter += "perl-module-strict" +RDEPENDS:perl-module-test-builder-formatter += "perl-module-test2-util-hashbase" +RDEPENDS:perl-module-test-builder-formatter += "perl-module-warnings" +RDEPENDS:perl-module-test-builder-module += "perl-module-exporter" +RDEPENDS:perl-module-test-builder-module += "perl-module-strict" +RDEPENDS:perl-module-test-builder-module += "perl-module-test-builder" +RDEPENDS:perl-module-test-builder += "perl-module-data-dumper" +RDEPENDS:perl-module-test-builder += "perl-module-overload" +RDEPENDS:perl-module-test-builder += "perl-module-strict" +RDEPENDS:perl-module-test-builder += "perl-module-test2-api" +RDEPENDS:perl-module-test-builder += "perl-module-test2-event-subtest" +RDEPENDS:perl-module-test-builder += "perl-module-test2-hub-subtest" +RDEPENDS:perl-module-test-builder += "perl-module-test2-ipc" +RDEPENDS:perl-module-test-builder += "perl-module-test2-ipc-driver-files" +RDEPENDS:perl-module-test-builder += "perl-module-test2-util" +RDEPENDS:perl-module-test-builder += "perl-module-test-builder-formatter" +RDEPENDS:perl-module-test-builder += "perl-module-test-builder-tododiag" +RDEPENDS:perl-module-test-builder += "perl-module-warnings" +RDEPENDS:perl-module-test-builder-tester-color += "perl-module-strict" +RDEPENDS:perl-module-test-builder-tester-color += "perl-module-test-builder-tester" +RDEPENDS:perl-module-test-builder-tester += "perl-module-exporter" +RDEPENDS:perl-module-test-builder-tester += "perl-module-strict" +RDEPENDS:perl-module-test-builder-tester += "perl-module-test-builder" +RDEPENDS:perl-module-test-builder-tododiag += "perl-module-strict" +RDEPENDS:perl-module-test-builder-tododiag += "perl-module-warnings" +RDEPENDS:perl-module-test-harness += "perl-module-base" +RDEPENDS:perl-module-test-harness += "perl-module-config" +RDEPENDS:perl-module-test-harness += "perl-module-constant" +RDEPENDS:perl-module-test-harness += "perl-module-strict" +RDEPENDS:perl-module-test-harness += "perl-module-tap-harness" +RDEPENDS:perl-module-test-harness += "perl-module-tap-parser-aggregator" +RDEPENDS:perl-module-test-harness += "perl-module-tap-parser-source" +RDEPENDS:perl-module-test-harness += "perl-module-tap-parser-sourcehandler-perl" +RDEPENDS:perl-module-test-harness += "perl-module-text-parsewords" +RDEPENDS:perl-module-test-harness += "perl-module-warnings" +RDEPENDS:perl-module-test-more += "perl-module-strict" +RDEPENDS:perl-module-test-more += "perl-module-test-builder-module" +RDEPENDS:perl-module-test-more += "perl-module-warnings" +RDEPENDS:perl-module-test += "perl-module-exporter" +RDEPENDS:perl-module-test += "perl-module-file-temp" +RDEPENDS:perl-module-test += "perl-module-strict" +RDEPENDS:perl-module-test-simple += "perl-module-strict" +RDEPENDS:perl-module-test-simple += "perl-module-test-builder-module" +RDEPENDS:perl-module-test-tester-capture += "perl-module-config" +RDEPENDS:perl-module-test-tester-capture += "perl-module-strict" +RDEPENDS:perl-module-test-tester-capture += "perl-module-test-builder" +RDEPENDS:perl-module-test-tester-capture += "perl-module-vars" +RDEPENDS:perl-module-test-tester-capturerunner += "perl-module-exporter" +RDEPENDS:perl-module-test-tester-capturerunner += "perl-module-strict" +RDEPENDS:perl-module-test-tester-capturerunner += "perl-module-test-tester-capture" +RDEPENDS:perl-module-test-tester-delegate += "perl-module-strict" +RDEPENDS:perl-module-test-tester-delegate += "perl-module-vars" +RDEPENDS:perl-module-test-tester-delegate += "perl-module-warnings" +RDEPENDS:perl-module-test-tester += "perl-module-exporter" +RDEPENDS:perl-module-test-tester += "perl-module-strict" +RDEPENDS:perl-module-test-tester += "perl-module-test-builder" +RDEPENDS:perl-module-test-tester += "perl-module-test-tester-capturerunner" +RDEPENDS:perl-module-test-tester += "perl-module-test-tester-delegate" +RDEPENDS:perl-module-test-tester += "perl-module-vars" +RDEPENDS:perl-module-text-abbrev += "perl-module-exporter" +RDEPENDS:perl-module-text-balanced += "perl-module-exporter" +RDEPENDS:perl-module-text-balanced += "perl-module-overload" +RDEPENDS:perl-module-text-balanced += "perl-module-strict" +RDEPENDS:perl-module-text-balanced += "perl-module-vars" +RDEPENDS:perl-module-text-parsewords += "perl-module-exporter" +RDEPENDS:perl-module-text-parsewords += "perl-module-strict" +RDEPENDS:perl-module-text-parsewords += "perl-module-warnings" +RDEPENDS:perl-module-text-tabs += "perl-module-strict" +RDEPENDS:perl-module-text-wrap += "perl-module-re" +RDEPENDS:perl-module-text-wrap += "perl-module-strict" +RDEPENDS:perl-module-text-wrap += "perl-module-text-tabs" +RDEPENDS:perl-module-text-wrap += "perl-module-warnings-register" +RDEPENDS:perl-module-thread += "perl-module-config" +RDEPENDS:perl-module-thread += "perl-module-exporter" +RDEPENDS:perl-module-thread += "perl-module-strict" +RDEPENDS:perl-module-thread += "perl-module-threads" +RDEPENDS:perl-module-thread += "perl-module-threads-shared" +RDEPENDS:perl-module-thread += "perl-module-warnings" +RDEPENDS:perl-module-thread-queue += "perl-module-strict" +RDEPENDS:perl-module-thread-queue += "perl-module-threads-shared" +RDEPENDS:perl-module-thread-queue += "perl-module-warnings" +RDEPENDS:perl-module-thread-semaphore += "perl-module-strict" +RDEPENDS:perl-module-thread-semaphore += "perl-module-threads-shared" +RDEPENDS:perl-module-thread-semaphore += "perl-module-warnings" +RDEPENDS:perl-module-threads += "perl-module-config" +RDEPENDS:perl-module-threads += "perl-module-overload" +RDEPENDS:perl-module-threads += "perl-module-strict" +RDEPENDS:perl-module-threads += "perl-module-warnings" +RDEPENDS:perl-module-threads += "perl-module-xsloader" +RDEPENDS:perl-module-threads-shared += "perl-module-config" +RDEPENDS:perl-module-threads-shared += "perl-module-strict" +RDEPENDS:perl-module-threads-shared += "perl-module-warnings" +RDEPENDS:perl-module-threads-shared += "perl-module-xsloader" +RDEPENDS:perl-module-tie-array += "perl-module-strict" +RDEPENDS:perl-module-tie-file += "perl-module-fcntl" +RDEPENDS:perl-module-tie-file += "perl-module-posix" +RDEPENDS:perl-module-tie-file += "perl-module-strict" +RDEPENDS:perl-module-tie-file += "perl-module-warnings" +RDEPENDS:perl-module-tie-handle += "perl-module-tie-stdhandle" +RDEPENDS:perl-module-tie-handle += "perl-module-warnings-register" +RDEPENDS:perl-module-tie-hash-namedcapture += "perl-module-strict" +RDEPENDS:perl-module-tie-hash += "perl-module-warnings-register" +RDEPENDS:perl-module-tie-memoize += "perl-module-strict" +RDEPENDS:perl-module-tie-memoize += "perl-module-tie-hash" +RDEPENDS:perl-module-tie-refhash += "perl-module-config" +RDEPENDS:perl-module-tie-refhash += "perl-module-overload" +RDEPENDS:perl-module-tie-refhash += "perl-module-strict" +RDEPENDS:perl-module-tie-refhash += "perl-module-tie-hash" +RDEPENDS:perl-module-tie-scalar += "perl-module-warnings-register" +RDEPENDS:perl-module-tie-stdhandle += "perl-module-strict" +RDEPENDS:perl-module-tie-stdhandle += "perl-module-tie-handle" +RDEPENDS:perl-module-tie-substrhash += "perl-module-integer" +RDEPENDS:perl-module-tie-substrhash += "perl-module-strict" +RDEPENDS:perl-module-tie-substrhash += "perl-module-warnings" +RDEPENDS:perl-module-time-gmtime += "perl-module-exporter" +RDEPENDS:perl-module-time-gmtime += "perl-module-strict" +RDEPENDS:perl-module-time-gmtime += "perl-module-time-tm" +RDEPENDS:perl-module-time-hires += "perl-module-exporter" +RDEPENDS:perl-module-time-hires += "perl-module-strict" +RDEPENDS:perl-module-time-hires += "perl-module-xsloader" +RDEPENDS:perl-module-time-local += "perl-module-config" +RDEPENDS:perl-module-time-local += "perl-module-constant" +RDEPENDS:perl-module-time-local += "perl-module-exporter" +RDEPENDS:perl-module-time-local += "perl-module-parent" +RDEPENDS:perl-module-time-local += "perl-module-strict" +RDEPENDS:perl-module-time-localtime += "perl-module-exporter" +RDEPENDS:perl-module-time-localtime += "perl-module-strict" +RDEPENDS:perl-module-time-localtime += "perl-module-time-tm" +RDEPENDS:perl-module-time-piece += "perl-module-constant" +RDEPENDS:perl-module-time-piece += "perl-module-exporter" +RDEPENDS:perl-module-time-piece += "perl-module-integer" +RDEPENDS:perl-module-time-piece += "perl-module-overload" +RDEPENDS:perl-module-time-piece += "perl-module-strict" +RDEPENDS:perl-module-time-piece += "perl-module-time-local" +RDEPENDS:perl-module-time-piece += "perl-module-time-seconds" +RDEPENDS:perl-module-time-piece += "perl-module-xsloader" +RDEPENDS:perl-module-time-seconds += "perl-module-constant" +RDEPENDS:perl-module-time-seconds += "perl-module-exporter" +RDEPENDS:perl-module-time-seconds += "perl-module-overload" +RDEPENDS:perl-module-time-seconds += "perl-module-strict" +RDEPENDS:perl-module-time-tm += "perl-module-class-struct" +RDEPENDS:perl-module-time-tm += "perl-module-strict" +RDEPENDS:perl-module-unicode-collate-cjk-big5 += "perl-module-strict" +RDEPENDS:perl-module-unicode-collate-cjk-big5 += "perl-module-warnings" +RDEPENDS:perl-module-unicode-collate-cjk-gb2312 += "perl-module-strict" +RDEPENDS:perl-module-unicode-collate-cjk-gb2312 += "perl-module-warnings" +RDEPENDS:perl-module-unicode-collate-cjk-jisx0208 += "perl-module-strict" +RDEPENDS:perl-module-unicode-collate-cjk-jisx0208 += "perl-module-warnings" +RDEPENDS:perl-module-unicode-collate-cjk-korean += "perl-module-strict" +RDEPENDS:perl-module-unicode-collate-cjk-korean += "perl-module-warnings" +RDEPENDS:perl-module-unicode-collate-cjk-pinyin += "perl-module-strict" +RDEPENDS:perl-module-unicode-collate-cjk-pinyin += "perl-module-warnings" +RDEPENDS:perl-module-unicode-collate-cjk-stroke += "perl-module-strict" +RDEPENDS:perl-module-unicode-collate-cjk-stroke += "perl-module-warnings" +RDEPENDS:perl-module-unicode-collate-cjk-zhuyin += "perl-module-strict" +RDEPENDS:perl-module-unicode-collate-cjk-zhuyin += "perl-module-warnings" +RDEPENDS:perl-module-unicode-collate-locale += "perl-module-base" +RDEPENDS:perl-module-unicode-collate-locale += "perl-module-strict" +RDEPENDS:perl-module-unicode-collate-locale += "perl-module-warnings" +RDEPENDS:perl-module-unicode-collate += "perl-module-constant" +RDEPENDS:perl-module-unicode-collate += "perl-module-strict" +RDEPENDS:perl-module-unicode-collate += "perl-module-warnings" +RDEPENDS:perl-module-unicode-collate += "perl-module-xsloader" +RDEPENDS:perl-module-unicode-normalize += "perl-module-bytes" +RDEPENDS:perl-module-unicode-normalize += "perl-module-exporter" +RDEPENDS:perl-module-unicode-normalize += "perl-module-strict" +RDEPENDS:perl-module-unicode-normalize += "perl-module-warnings" +RDEPENDS:perl-module-unicode-normalize += "perl-module-xsloader" +RDEPENDS:perl-module-unicode-ucd += "perl-module-charnames" +RDEPENDS:perl-module-unicode-ucd += "perl-module-exporter" +RDEPENDS:perl-module-unicode-ucd += "perl-module-feature" +RDEPENDS:perl-module-unicode-ucd += "perl-module-if" +RDEPENDS:perl-module-unicode-ucd += "perl-module-integer" +RDEPENDS:perl-module-unicode-ucd += "perl-module-re" +RDEPENDS:perl-module-unicode-ucd += "perl-module-strict" +RDEPENDS:perl-module-unicode-ucd += "perl-module-unicode-normalize" +RDEPENDS:perl-module-unicode-ucd += "perl-module-warnings" +RDEPENDS:perl-module-user-grent += "perl-module-class-struct" +RDEPENDS:perl-module-user-grent += "perl-module-exporter" +RDEPENDS:perl-module-user-grent += "perl-module-strict" +RDEPENDS:perl-module-user-pwent += "perl-module-class-struct" +RDEPENDS:perl-module-user-pwent += "perl-module-config" +RDEPENDS:perl-module-user-pwent += "perl-module-exporter" +RDEPENDS:perl-module-user-pwent += "perl-module-strict" +RDEPENDS:perl-module-user-pwent += "perl-module-warnings" +RDEPENDS:perl-module-utf8 += "perl-module-strict" +RDEPENDS:perl-module-utf8 += "perl-module-warnings" +RDEPENDS:perl-module-version += "perl-module-strict" +RDEPENDS:perl-module-version += "perl-module-version-regex" +RDEPENDS:perl-module-version += "perl-module-warnings-register" +RDEPENDS:perl-module-version-regex += "perl-module-strict" +RDEPENDS:perl-module-xsloader += "perl-module-dynaloader" +RDEPENDS:perl-module-xsloader += "perl-module-strict" diff --git a/meta-openeuler/recipes-devtools/perl/files/run-ptest b/meta-openeuler/recipes-devtools/perl/files/run-ptest new file mode 100644 index 0000000000000000000000000000000000000000..0547f818b22e8b67c49c93af3e33349d644ae2cf --- /dev/null +++ b/meta-openeuler/recipes-devtools/perl/files/run-ptest @@ -0,0 +1,2 @@ +#!/bin/sh +{ cd t && PERL_BUILD_PACKAGING=1 ./TEST || echo "FAIL: perl" ; } | sed -u -e 's|\(.*\) .* ok$|PASS: \1|' -e 's|\(.*\) .* skipped|SKIP: \1|' -e 's|\(.*\) \.\(.*\)|FAIL: \1|' diff --git a/meta-openeuler/recipes-devtools/perl/perl-ptest.inc b/meta-openeuler/recipes-devtools/perl/perl-ptest.inc new file mode 100644 index 0000000000000000000000000000000000000000..e07355d3f54d1ef72f2ea46f3b8ef2588d2e2917 --- /dev/null +++ b/meta-openeuler/recipes-devtools/perl/perl-ptest.inc @@ -0,0 +1,63 @@ +inherit ptest + +SRC_URI += "file://run-ptest \ + " + +DEBUG_PREFIX_MAP_REGEX = "${@'\\|'.join(d.getVar('DEBUG_PREFIX_MAP').split())}" + +do_install_ptest () { + mkdir -p ${D}${PTEST_PATH} + sed -e "s:\/usr\/local:${bindir}:g" -i cpan/version/t/* + sed -e "s:\/opt:\/usr:" -i Porting/add-package.pl + sed -e "s:\/local\/gnu\/:\/:" -i hints/cxux.sh + tar -c --exclude=try --exclude=a.out --exclude='*.o' --exclude=libperl.so* --exclude=[Mm]akefile --exclude=hostperl \ + --exclude=cygwin --exclude=os2 --exclude=djgpp --exclude=qnx --exclude=symbian --exclude=haiku \ + --exclude=vms --exclude=vos --exclude=NetWare --exclude=amigaos4 --exclude=buildcustomize.pl \ + --exclude='win32/config.*' --exclude=plan9 --exclude=README.plan9 --exclude=perlplan9.pod --exclude=Configure \ + --exclude=veryclean.sh --exclude=realclean.sh --exclude=getioctlsizes \ + --exclude=dl_aix.xs --exclude=sdbm.3 --exclude='cflags.SH' --exclude=[Mm]akefile.old \ + --exclude=miniperl --exclude=generate_uudmap --exclude=patches --exclude='config.log' * | ( cd ${D}${PTEST_PATH} && tar -x ) + + ln -sf ${bindir}/perl ${D}${PTEST_PATH}/t/perl + + # Remove build host references from various scattered files... + find "${D}${PTEST_PATH}" \ + \( -name '*.PL' -o -name 'myconfig' -o -name 'cflags' -o -name '*.pl' -o -name '*.sh' -o -name '*.pm' \ + -o -name 'h2xs' -o -name 'h2ph' \ + -o -name '*.h' -o -name 'config.sh-*' -o -name 'pod2man' -o -name 'pod2text' -o -name 'Makefile.config' \) \ + -type f -exec sed -i \ + -e "s,${D},,g" \ + -e "s,--sysroot=${STAGING_DIR_HOST},,g" \ + -e "s,-isystem${STAGING_INCDIR} ,,g" \ + -e 's^${DEBUG_PREFIX_MAP_REGEX}^^g' \ + -e "s,${STAGING_BINDIR_NATIVE}/perl-native/,${bindir}/,g" \ + -e "s,${STAGING_LIBDIR},${libdir},g" \ + -e "s,${STAGING_BINDIR},${bindir},g" \ + -e "s,${STAGING_INCDIR},${includedir},g" \ + -e "s,${STAGING_BINDIR_NATIVE}/,,g" \ + -e "s,${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX},${bindir},g" \ + -e 's:${RECIPE_SYSROOT_NATIVE}::g' \ + -e 's:${RECIPE_SYSROOT}::g' \ + {} + + + # Remove a useless timestamp... + sed -i -e '/Autogenerated starting on/d' ${D}${PTEST_PATH}/lib/unicore/mktables.lst + + # Remove files with host-specific configuration for building native binaries + rm ${D}${PTEST_PATH}/Makefile.config ${D}${PTEST_PATH}/xconfig.h ${D}${PTEST_PATH}/xconfig.sh +} + +python populate_packages:prepend() { + # Put all *.t files from the lib dir in the ptest package + # do_split_packages requires a pair of () in the regex, but we have nothing + # to match, so use an empty pair. + if bb.utils.contains('DISTRO_FEATURES', 'ptest', True, False, d): + do_split_packages(d, d.expand('${libdir}/perl/${PV}'), r'.*\.t()', + '${PN}-ptest%s', '%s', recursive=True, match_path=True) +} + +RDEPENDS:${PN}-ptest += "${PN}-modules ${PN}-doc sed procps-ps" + +# The perl-ptest package contains Perl internal modules and generating file +# dependencies for it causes problems. +SKIP_FILEDEPS:${PN}-ptest = '1' diff --git a/meta-openeuler/recipes-devtools/perl/perl_%.bbappend b/meta-openeuler/recipes-devtools/perl/perl_%.bbappend index 86183e282a49134bc2d5dfa5a5c0342d7d79db9d..8c367370cca79f6b4c3d895e8cf3f0464608ebc9 100644 --- a/meta-openeuler/recipes-devtools/perl/perl_%.bbappend +++ b/meta-openeuler/recipes-devtools/perl/perl_%.bbappend @@ -1,12 +1,8 @@ -# main bbfile: yocto-poky/meta/recipes-devtools/perl/perl_5.34.1.bb -PV = "5.38.0" +# main bbfile: meta-openeuler/recipes-devtools/perl/perl_5.38.0.bb -# We remove the patches which is not suitable for openEuler -SRC_URI:remove = " \ - https://www.cpan.org/src/5.0/perl-${PV}.tar.gz;name=perl \ - file://0001-Fix-build-with-gcc-12.patch \ -" +OPENEULER_SRC_URI_REMOVE = "http git" +PV = "5.38.0" # patches from openeuler # perl-5.34.0-Destroy-GDBM-NDBM-ODBM-SDBM-_File-objects-only-from-.patch fail: @@ -18,10 +14,3 @@ SRC_URI:prepend = " file://perl-${PV}.tar.xz \ file://change-lib-to-lib64.patch \ file://disable-rpath-by-default.patch \ " - -# Perl officially discourges the use of threads -# fix error: ld.bfd: libperl.so.5.38.0: undefined reference to `PL_curpad' -do_configure:remove = "-Dusethreads" - -# Specify the sysroot when running do_configure, solving compilation problem: "No error definitions found at Errno_pm.PL" -PACKAGECONFIG_CONFARGS:class-target += "--sysroot=${STAGING_DIR_HOST}" diff --git a/meta-openeuler/recipes-devtools/perl/perl_5.38.0.bb b/meta-openeuler/recipes-devtools/perl/perl_5.38.0.bb new file mode 100644 index 0000000000000000000000000000000000000000..956e4d64d705966f87aca852f5f0158b66d9cb5f --- /dev/null +++ b/meta-openeuler/recipes-devtools/perl/perl_5.38.0.bb @@ -0,0 +1,422 @@ +SUMMARY = "Perl scripting language" +HOMEPAGE = "http://www.perl.org/" +DESCRIPTION = "Perl is a highly capable, feature-rich programming language" +SECTION = "devel" +LICENSE = "Artistic-1.0 | GPL-1.0-or-later" +LIC_FILES_CHKSUM = "file://Copying;md5=5b122a36d0f6dc55279a0ebc69f3c60b \ + file://Artistic;md5=71a4d5d9acc18c0952a6df2218bb68da \ + " + + +SRC_URI = "https://www.cpan.org/src/5.0/perl-${PV}.tar.gz;name=perl \ + file://perl-rdepends.txt \ + file://0001-Somehow-this-module-breaks-through-the-perl-wrapper-.patch \ + file://errno_ver.diff \ + file://native-perlinc.patch \ + file://perl-dynloader.patch \ + file://0002-Constant-Fix-up-shebang.patch \ + file://determinism.patch \ + file://0001-cpan-Sys-Syslog-Makefile.PL-Fix-_PATH_LOG-for-determ.patch \ + " +SRC_URI:append:class-native = " \ + file://perl-configpm-switch.patch \ +" +SRC_URI:append:class-target = " \ + file://encodefix.patch \ +" + +SRC_URI[perl.sha256sum] = "213ef58089d2f2c972ea353517dc60ec3656f050dcc027666e118b508423e517" + +B = "${WORKDIR}/perl-${PV}-build" + +inherit upstream-version-is-even update-alternatives + +DEPENDS += "perlcross-native zlib virtual/crypt" +# make 4.1 has race issues with the double-colon usage of MakeMaker, see #14096 +DEPENDS += "make-native" + +PERL_LIB_VER = "${@'.'.join(d.getVar('PV').split('.')[0:2])}.0" + +PACKAGECONFIG ??= "gdbm" +PACKAGECONFIG:append:libc-musl = " anylocale" +PACKAGECONFIG[bdb] = ",-Ui_db,db" +PACKAGECONFIG[gdbm] = ",-Ui_gdbm,gdbm" +PACKAGECONFIG[anylocale] = "-Dd_setlocale_accepts_any_locale_name=define,," + +# Don't generate comments in enc2xs output files. They are not reproducible +export ENC2XS_NO_COMMENTS = "1" + +CFLAGS += "-D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" + +do_configure:prepend() { + rm -rf ${B} + cp -rfp ${S} ${B} + cp -rfp ${STAGING_DATADIR_NATIVE}/perl-cross/* ${B} + cd ${B} +} + +do_configure:class-target() { + ./configure --prefix=${prefix} --libdir=${libdir} \ + --target=${TARGET_SYS} \ + -Duse64bitint \ + -Duseshrplib \ + -Dusethreads \ + -Dsoname=libperl.so.5 \ + -Dvendorprefix=${prefix} \ + -Dvendorlibdir=${libdir} \ + -Darchlibexp=${STAGING_LIBDIR}/perl5/${PV}/${TARGET_ARCH}-linux \ + -Dlibpth='${libdir} ${base_libdir}' \ + -Dglibpth='${libdir} ${base_libdir}' \ + -Alddlflags=' ${LDFLAGS}' \ + -Dd_gnulibc=define \ + ${PACKAGECONFIG_CONFARGS} + + #perl.c uses an ARCHLIB_EXP define to generate compile-time code that + #adds the archlibexp path to @INC during run-time initialization of a + #new perl interpreter. + + #Because we've changed this value in a temporary way to make it + #possible to use ExtUtils::Embed in the target build (the temporary + #value in config.sh gets re-stripped out during packaging), the + #ARCHLIB_EXP value that gets generated still uses the temporary version + #instead of the original expected version (i.e. becauses it's in the + #generated config.h, it doesn't get stripped out during packaging like + #the others in config.sh). + + sed -i -e "s,${STAGING_LIBDIR},${libdir},g" config.h +} + +do_configure:class-nativesdk() { + ./configure --prefix=${prefix} \ + --target=${TARGET_SYS} \ + -Duseshrplib \ + -Dusethreads \ + -Dsoname=libperl.so.5 \ + -Dvendorprefix=${prefix} \ + -Darchlibexp=${STAGING_LIBDIR}/perl5/${PV}/${TARGET_ARCH}-linux \ + -Alddlflags=' ${LDFLAGS}' \ + ${PACKAGECONFIG_CONFARGS} + + # See the comment above + sed -i -e "s,${STAGING_LIBDIR},${libdir},g" config.h +} + +do_configure:class-native() { + ./configure --prefix=${prefix} \ + -Dbin=${bindir}/perl-native \ + -Duseshrplib \ + -Dusethreads \ + -Dsoname=libperl.so.5 \ + -Dvendorprefix=${prefix} \ + -Ui_xlocale \ + -Alddlflags=' ${LDFLAGS}' \ + ${PACKAGECONFIG_CONFARGS} + + # This prevents leakage of build paths into perl-native binaries, which + # causes non-deterministic troubles when those paths no longer exist or aren't accessible. + sed -i -e "s,${STAGING_LIBDIR},/completelyboguspath,g" config.h +} + +do_configure:append() { + if [ -n "$SOURCE_DATE_EPOCH" ]; then + PERL_BUILD_DATE="$(${PYTHON} -c "\ +from datetime import datetime, timezone; \ +print(datetime.fromtimestamp($SOURCE_DATE_EPOCH, timezone.utc).strftime('%a %b %d %H:%M:%S %Y')) \ + ")" + echo "#define PERL_BUILD_DATE \"$PERL_BUILD_DATE\"" >> config.h + fi +} + +do_compile() { + oe_runmake +} + +do_install() { + oe_runmake 'DESTDIR=${D}' install + + install -d ${D}${libdir}/perl5 + install -d ${D}${libdir}/perl5/${PV}/ + install -d ${D}${libdir}/perl5/${PV}/ExtUtils/ + + # Save native config + install config.sh ${D}${libdir}/perl5 + install lib/Config.pm ${D}${libdir}/perl5/${PV}/ + install lib/ExtUtils/typemap ${D}${libdir}/perl5/${PV}/ExtUtils/ + + # Fix up shared library + dir=$(echo ${D}/${libdir}/perl5/${PV}/*/CORE) + rm $dir/libperl.so + ln -sf ../../../../libperl.so.${PERL_LIB_VER} $dir/libperl.so + + # Try to catch Bug #13946 + if [ -e ${D}/${libdir}/perl5/${PV}/Storable.pm ]; then + bbfatal 'non-arch specific Storable.pm found! See https://bugzilla.yoctoproject.org/show_bug.cgi?id=13946' + fi +} + +do_install:append:class-target() { + # This is used to substitute target configuration when running native perl via perl-configpm-switch.patch + ln -s Config_heavy.pl ${D}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config_heavy-target.pl + + # xconfig.h contains references to build host architecture, and yet is included from various other places. + # To make it reproducible let's make it a copy of config.h patch that is specific to the target architecture. + # It is believed that the original header is the product of building miniperl (a helper executable built with host compiler). + cp ${D}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/CORE/config.h ${D}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/CORE/xconfig.h +} + +do_install:append:class-nativesdk() { + # This is used to substitute target configuration when running native perl via perl-configpm-switch.patch + ln -s Config_heavy.pl ${D}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config_heavy-target.pl + + create_wrapper ${D}${bindir}/perl \ + PERL5LIB='$PERL5LIB:${SDKPATHNATIVE}/${libdir_nativesdk}/perl5/site_perl/${PV}:${SDKPATHNATIVE}/${libdir_nativesdk}/perl5/vendor_perl/${PV}:${SDKPATHNATIVE}/${libdir_nativesdk}/perl5/${PV}' +} + +do_install:append:class-native () { + # Those wrappers mean that perl installed from sstate (which may change + # path location) works and that in the nativesdk case, the SDK can be + # installed to a different location from the one it was built for. + create_wrapper ${D}${bindir}/perl-native/perl PERL5LIB='$PERL5LIB:${STAGING_LIBDIR}/perl5/site_perl/${PV}:${STAGING_LIBDIR}/perl5/vendor_perl/${PV}:${STAGING_LIBDIR}/perl5/${PV}' + + # Use /usr/bin/env nativeperl for the perl script. + for f in `grep -Il '#! *${bindir}/perl' ${D}/${bindir}/*`; do + sed -i -e 's|${bindir}/perl|/usr/bin/env nativeperl|' $f + done +} + +PACKAGE_PREPROCESS_FUNCS += "perl_package_preprocess" + +perl_package_preprocess () { + # Fix up installed configuration + sed -i -e "s,${D},,g" \ + -e "s,${DEBUG_PREFIX_MAP},,g" \ + -e "s,--sysroot=${STAGING_DIR_HOST},,g" \ + -e "s,-isystem${STAGING_INCDIR} ,,g" \ + -e "s,${STAGING_LIBDIR},${libdir},g" \ + -e "s,${STAGING_BINDIR},${bindir},g" \ + -e "s,${STAGING_INCDIR},${includedir},g" \ + -e "s,${STAGING_BINDIR_NATIVE}/perl-native/,${bindir}/,g" \ + -e "s,${STAGING_BINDIR_NATIVE}/,,g" \ + -e "s,${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX},${bindir},g" \ + -e 's:${RECIPE_SYSROOT}::g' \ + ${PKGD}${bindir}/h2xs.perl \ + ${PKGD}${bindir}/h2ph.perl \ + ${PKGD}${bindir}/pod2man.perl \ + ${PKGD}${bindir}/pod2text.perl \ + ${PKGD}${bindir}/pod2usage.perl \ + ${PKGD}${bindir}/podchecker.perl \ + ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/CORE/config.h \ + ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/CORE/xconfig.h \ + ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/CORE/perl.h \ + ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/CORE/pp.h \ + ${PKGD}${libdir}/perl5/${PV}/Config.pm \ + ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config.pm \ + ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config.pod \ + ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config_git.pl \ + ${PKGD}${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config_heavy.pl \ + ${PKGD}${libdir}/perl5/${PV}/ExtUtils/Liblist/Kid.pm \ + ${PKGD}${libdir}/perl5/${PV}/FileCache.pm \ + ${PKGD}${libdir}/perl5/${PV}/pod/*.pod \ + ${PKGD}${libdir}/perl5/config.sh +} + +inherit update-alternatives + +ALTERNATIVE_PRIORITY = "100" + +ALTERNATIVE:${PN}-misc = "corelist cpan enc2xs encguess h2ph h2xs instmodsh json_pp libnetcfg \ + piconv pl2pm pod2html pod2man pod2text pod2usage podchecker \ + prove ptar ptardiff ptargrep shasum splain streamzip xsubpp zipdetails" +ALTERNATIVE_LINK_NAME[corelist] = "${bindir}/corelist" +ALTERNATIVE_LINK_NAME[cpan] = "${bindir}/cpan" +ALTERNATIVE_LINK_NAME[enc2xs] = "${bindir}/enc2xs" +ALTERNATIVE_LINK_NAME[encguess] = "${bindir}/encguess" +ALTERNATIVE_LINK_NAME[h2ph] = "${bindir}/h2ph" +ALTERNATIVE_LINK_NAME[h2xs] = "${bindir}/h2xs" +ALTERNATIVE_LINK_NAME[instmodsh] = "${bindir}/instmodsh" +ALTERNATIVE_LINK_NAME[json_pp] = "${bindir}/json_pp" +ALTERNATIVE_LINK_NAME[libnetcfg] = "${bindir}/libnetcfg" +ALTERNATIVE_LINK_NAME[piconv] = "${bindir}/piconv" +ALTERNATIVE_LINK_NAME[pl2pm] = "${bindir}/pl2pm" +ALTERNATIVE_LINK_NAME[pod2html] = "${bindir}/pod2html" +ALTERNATIVE_LINK_NAME[pod2man] = "${bindir}/pod2man" +ALTERNATIVE_LINK_NAME[pod2text] = "${bindir}/pod2text" +ALTERNATIVE_LINK_NAME[pod2usage] = "${bindir}/pod2usage" +ALTERNATIVE_LINK_NAME[podchecker] = "${bindir}/podchecker" +ALTERNATIVE_LINK_NAME[prove] = "${bindir}/prove" +ALTERNATIVE_LINK_NAME[ptar] = "${bindir}/ptar" +ALTERNATIVE_LINK_NAME[ptardiff] = "${bindir}/ptardiff" +ALTERNATIVE_LINK_NAME[ptargrep] = "${bindir}/ptargrep" +ALTERNATIVE_LINK_NAME[shasum] = "${bindir}/shasum" +ALTERNATIVE_LINK_NAME[splain] = "${bindir}/splain" +ALTERNATIVE_LINK_NAME[streamzip] = "${bindir}/streamzip" +ALTERNATIVE_LINK_NAME[xsubpp] = "${bindir}/xsubpp" +ALTERNATIVE_LINK_NAME[zipdetails] = "${bindir}/zipdetails" + +require perl-ptest.inc + +FILES:${PN} = "${bindir}/perl ${bindir}/perl.real ${bindir}/perl${PV} ${libdir}/libperl.so* \ + ${libdir}/perl5/site_perl \ + ${libdir}/perl5/${PV}/Config.pm \ + ${libdir}/perl5/${PV}/${TARGET_ARCH}-linux/Config.pm \ + ${libdir}/perl5/${PV}/*/Config_git.pl \ + ${libdir}/perl5/${PV}/*/Config_heavy-target.pl \ + ${libdir}/perl5/config.sh \ + ${libdir}/perl5/${PV}/strict.pm \ + ${libdir}/perl5/${PV}/warnings.pm \ + ${libdir}/perl5/${PV}/warnings \ + ${libdir}/perl5/${PV}/vars.pm \ + ${libdir}/perl5/site_perl \ + ${libdir}/perl5/${PV}/ExtUtils/MANIFEST.SKIP \ + ${libdir}/perl5/${PV}/ExtUtils/xsubpp \ + ${libdir}/perl5/${PV}/ExtUtils/typemap \ + " +RPROVIDES:${PN} += "perl-module-strict perl-module-vars perl-module-config perl-module-warnings \ + perl-module-warnings-register" + +FILES:${PN}-staticdev:append = " ${libdir}/perl5/${PV}/*/CORE/libperl.a" + +FILES:${PN}-dev:append = " ${libdir}/perl5/${PV}/*/CORE" + +FILES:${PN}-doc:append = " ${libdir}/perl5/${PV}/Unicode/Collate/*.txt \ + ${libdir}/perl5/${PV}/*/.packlist \ + ${libdir}/perl5/${PV}/Encode/encode.h \ + " +PACKAGES += "${PN}-misc" + +FILES:${PN}-misc = "${bindir}/*" + +PACKAGES += "${PN}-pod" + +FILES:${PN}-pod = "${libdir}/perl5/${PV}/pod \ + ${libdir}/perl5/${PV}/*.pod \ + ${libdir}/perl5/${PV}/*/*.pod \ + ${libdir}/perl5/${PV}/*/*/*.pod \ + ${libdir}/perl5/${PV}/*/*/*/*.pod \ + " + +PACKAGES += "${PN}-module-cpan ${PN}-module-unicore" + +FILES:${PN}-module-cpan += "${libdir}/perl5/${PV}/CPAN \ + " +FILES:${PN}-module-unicore += "${libdir}/perl5/${PV}/unicore" + +ALTERNATIVE_PRIORITY = "40" +ALTERNATIVE:${PN}-doc = "Thread.3" +ALTERNATIVE_LINK_NAME[Thread.3] = "${mandir}/man3/Thread.3" + +# Create a perl-modules package recommending all the other perl +# packages (actually the non modules packages and not created too) +ALLOW_EMPTY:${PN}-modules = "1" +PACKAGES += "${PN}-modules " + +PACKAGESPLITFUNCS =+ "split_perl_packages" + +python split_perl_packages () { + libdir = d.expand('${libdir}/perl5/${PV}') + do_split_packages(d, libdir, r'.*/auto/([^.]*)/[^/]*\.(so|ld|ix|al)', '${PN}-module-%s', 'perl module %s', recursive=True, match_path=True, prepend=False) + do_split_packages(d, libdir, r'.*linux/([^\/]*)\.pm', '${PN}-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True, prepend=False) + do_split_packages(d, libdir, r'Module/([^\/]*)\.pm', '${PN}-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True, prepend=False) + do_split_packages(d, libdir, r'Module/([^\/]*)/.*', '${PN}-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True, prepend=False) + do_split_packages(d, libdir, r'.*linux/([^\/].*)\.(pm|pl|e2x)', '${PN}-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True, prepend=False) + do_split_packages(d, libdir, r'(^(?!(CPAN\/|CPANPLUS\/|Module\/|unicore\/|.*linux\/)[^\/]).*)\.(pm|pl|e2x)', '${PN}-module-%s', 'perl module %s', recursive=True, allow_dirs=False, match_path=True, prepend=False) + + # perl-modules should recommend every perl module, and only the + # modules. Don't attempt to use the result of do_split_packages() as some + # modules are manually split (eg. perl-module-unicore). + packages = filter(lambda p: 'perl-module-' in p, d.getVar('PACKAGES').split()) + d.setVar(d.expand("RRECOMMENDS:${PN}-modules"), ' '.join(packages)) + + # Read the pre-generated dependency file, and use it to set module dependecies + for line in open(d.expand("${WORKDIR}") + '/perl-rdepends.txt').readlines(): + splitline = line.split() + # Filter empty lines and comments + if len(splitline) == 0 or splitline[0].startswith("#"): + continue + if bb.data.inherits_class('native', d): + module = splitline[0] + '-native' + depends = "perl-native" + else: + module = splitline[0].replace("RDEPENDS:perl", "RDEPENDS:${PN}") + depends = splitline[2].strip('"').replace("perl-module", "${PN}-module") + d.appendVar(d.expand(module), " " + depends) +} + +python() { + if d.getVar('CLASSOVERRIDE') == "class-target": + d.setVar("PACKAGES_DYNAMIC", "^${MLPREFIX}perl-module-.*(? ${WORKDIR}/perl-rdepends.inc + +# Some additional dependencies that the above doesn't manage to figure out +RDEPENDS:${PN}-module-file-spec += "${PN}-module-file-spec-unix" +RDEPENDS:${PN}-module-scalar-util += "${PN}-module-list-util" +RDEPENDS:${PN}-module-file-temp += "${PN}-module-scalar-util" +RDEPENDS:${PN}-module-file-temp += "${PN}-module-file-spec" +RDEPENDS:${PN}-module-io-file += "${PN}-module-symbol" +RDEPENDS:${PN}-module-io-file += "${PN}-module-carp" +RDEPENDS:${PN}-module-math-bigint += "${PN}-module-math-bigint-calc" +RDEPENDS:${PN}-module-test-builder += "${PN}-module-list-util" +RDEPENDS:${PN}-module-test-builder += "${PN}-module-scalar-util" +RDEPENDS:${PN}-module-test-builder-formatter += "${PN}-module-test2-formatter-tap" +RDEPENDS:${PN}-module-test2-api += "${PN}-module-test2-event-fail" +RDEPENDS:${PN}-module-test2-api += "${PN}-module-test2-event-pass" +RDEPENDS:${PN}-module-test2-api += "${PN}-module-test2-event-v2" +RDEPENDS:${PN}-module-test2-formatter-tap += "${PN}-module-test2-formatter" +RDEPENDS:${PN}-module-thread-queue += "${PN}-module-attributes" +RDEPENDS:${PN}-module-overload += "${PN}-module-overloading" + +# Generated depends list beyond this line +EOPREAMBLE + test -e packages-split.new && rm -rf packages-split.new + cp -r packages-split packages-split.new && cd packages-split.new + find . -name \*.pm | xargs sed -i '/^=head/,/^=cut/d' + egrep -r "^\s*(\ */+= \"perl-module-/g;s/CPANPLUS::.*/cpanplus/g;s/CPAN::.*/cpan/g;s/::/-/g;s/ [^+\"].*//g;s/_/-/g;s/\.pl\"$/\"/;s/\"\?\$/\"/;s/(//;s/)//;" | tr [:upper:] [:lower:] | \ + awk '{if ($3 != "\x22"$1"\x22"){ print $0}}'| \ + grep -v -e "\-vms\-" -e module-5 -e "^$" -e "\\$" -e your -e tk -e autoperl -e html -e http -e parse-cpan -e perl-ostype -e ndbm-file -e module-mac -e fcgi -e lwp -e dbd -e dbix | \ + sort -u | \ + sed 's/^/RDEPENDS:/;s/perl-module-/${PN}-module-/g;s/module-\(module-\)/\1/g;s/\(module-load\)-conditional/\1/g;s/encode-configlocal/&-pm/;' | \ + egrep -wv '=>|module-a|module-apache.?|module-apr|module-authen-sasl|module-b-asmdata|module-convert-ebcdic|module-devel-size|module-digest-perl-md5|module-dumpvalue|module-extutils-constant-aaargh56hash|module-extutils-xssymset|module-file-bsdglob|module-for|module-it|module-io-socket-inet6|module-io-socket-ssl|module-io-string|module-ipc-system-simple|module-lexical|module-local-lib|metadata|module-modperl-util|module-pluggable-object|module-test-builder-io-scalar|module-text-unidecode|module-unicore|module-win32|objects\sload|syscall.ph|systeminfo.ph|%s' | \ + egrep -wv '=>|module-algorithm-diff|module-carp|module-c|module-l|module-encode-hanextra|module-extutils-makemaker-version-regex|module-file-spec|module-io-compress-lzma|module-io-uncompress-unxz|module-locale-maketext-lexicon|module-log-agent|module-meta-notation|module-net-localcfg|module-net-ping-external|module-b-deparse|module-scalar-util|module-some-module|module-symbol|module-uri|module-win32api-file' > ${WORKDIR}/perl-rdepends.generated + cat ${WORKDIR}/perl-rdepends.inc ${WORKDIR}/perl-rdepends.generated > ${THISDIR}/files/perl-rdepends.txt +} + +# bitbake perl -c create_rdepends_inc +addtask do_create_rdepends_inc + +SYSROOT_PREPROCESS_FUNCS += "perl_sysroot_create_wrapper" + +perl_sysroot_create_wrapper () { + mkdir -p ${SYSROOT_DESTDIR}${bindir} + # Create a wrapper that /usr/bin/env perl will use to get perl-native. + # This MUST live in the normal bindir. + cat > ${SYSROOT_DESTDIR}${bindir}/nativeperl << EOF +#!/bin/sh +realpath=\`readlink -fn \$0\` +exec \`dirname \$realpath\`/perl-native/perl "\$@" +EOF + chmod 0755 ${SYSROOT_DESTDIR}${bindir}/nativeperl + cat ${SYSROOT_DESTDIR}${bindir}/nativeperl +} + +SSTATE_HASHEQUIV_FILEMAP = " \ + populate_sysroot:*/lib*/perl5/*/*/Config_heavy.pl:${TMPDIR} \ + populate_sysroot:*/lib*/perl5/*/*/Config_heavy.pl:${COREBASE} \ + populate_sysroot:*/lib*/perl5/config.sh:${TMPDIR} \ + populate_sysroot:*/lib*/perl5/config.sh:${COREBASE} \ + " diff --git a/meta-openeuler/recipes-devtools/swig/swig_%.bbappend b/meta-openeuler/recipes-devtools/swig/swig_%.bbappend index 4820876aeb09f5ed4c324fabeee6b63ecadd0cc8..9fe0d746cf2dab8d8482f5c8c5a0ca6ba28b383e 100644 --- a/meta-openeuler/recipes-devtools/swig/swig_%.bbappend +++ b/meta-openeuler/recipes-devtools/swig/swig_%.bbappend @@ -5,12 +5,10 @@ SRC_URI:remove = "${SOURCEFORGE_MIRROR}/${BPN}/${BPN}-${PV}.tar.gz" # use openeuler source and patches # yocto uses pcre not pcre2, so do not apply patches for pcre2 from openeuler -SRC_URI += "file://${BPN}/${BPN}-${PV}.tar.gz \ +SRC_URI += "file://${BPN}-${PV}.tar.gz \ file://Backport-php-8-support-from-upstream.patch \ file://0001-Ruby-Fix-deprecation-warnings-with-Ruby-3.x.patch \ file://0001-gcc-12-warning-fix-in-test-case.patch \ " -# checksum of tar.gz for 4.0.2 -SRC_URI[md5sum] = "7c3e46cb5af2b469722cafa0d91e127b" SRC_URI[sha256sum] = "d53be9730d8d58a16bf0cbd1f8ac0c0c3e1090573168bfa151b01eb47fa906fc" diff --git a/meta-openeuler/recipes-devtools/tcltk/tcl_%.bbappend b/meta-openeuler/recipes-devtools/tcltk/tcl_%.bbappend index ff5c3141396817a6bb356bfa00b4af8310e9302d..7a3ef912d0efdac893e6baff855c9a19a64a7293 100644 --- a/meta-openeuler/recipes-devtools/tcltk/tcl_%.bbappend +++ b/meta-openeuler/recipes-devtools/tcltk/tcl_%.bbappend @@ -23,4 +23,7 @@ file://oops.patch \ file://File-not-found-should-be-ignored-silently.patch \ " -SRC_URI[sha256sum] = "c61f0d6699e2bc7691f119b41963aaa8dc980f23532c4e937739832a5f4a6642" \ No newline at end of file +SRC_URI[sha256sum] = "c61f0d6699e2bc7691f119b41963aaa8dc980f23532c4e937739832a5f4a6642" + +# *.c files, e.g., ${libdir}/tcl8.6/tclAppInit.c should be in ${PN}-dev package +FILES:${PN}-dev += "${libdir}/tcl8.6/*.c" diff --git a/meta-openeuler/recipes-extended/libsolv/libsolv_%.bbappend b/meta-openeuler/recipes-extended/libsolv/libsolv_%.bbappend index 3cef60434dc97db62099ac2f959f5e25c4e6297e..30ee8b105ecaffdabcf7b17f4c9a7d661b8ee0b7 100644 --- a/meta-openeuler/recipes-extended/libsolv/libsolv_%.bbappend +++ b/meta-openeuler/recipes-extended/libsolv/libsolv_%.bbappend @@ -1,11 +1,17 @@ -PV = "0.7.22" +# main bbfile: yocto-poky/meta/recipes-extended/libsolv/libsolv_0.7.22.bb + +OPENEULER_SRC_URI_REMOVE = "http https git" S = "${WORKDIR}/${BP}" -SRC_URI[sha256sum] = "968aef452b5493751fa0168cd58745a77c755e202a43fe8d549d791eb16034d5" +FILESEXTRAPATHS:prepend := "${THISDIR}/files:" + +SRC_URI:remove = " \ + git://github.com/openSUSE/libsolv.git;branch=master;protocol=https \ +" -SRC_URI = " \ - https://github.com/openSUSE/libsolv/archive/refs/tags/${PV}.tar.gz \ +SRC_URI:prepend = "\ + file://${PV}.tar.gz \ file://Fix-memory-leak-when-using-testsolv-to-execute-cases.patch \ " diff --git a/meta-openeuler/recipes-external/glibc/glibc-external.bb b/meta-openeuler/recipes-external/glibc/glibc-external.bb index a3ed5f9f7c6a68ca8a171d52d3021c649b89e056..7579333d556709a031a74d4932aeecbe47e6fbb1 100644 --- a/meta-openeuler/recipes-external/glibc/glibc-external.bb +++ b/meta-openeuler/recipes-external/glibc/glibc-external.bb @@ -1,3 +1,5 @@ +# ref: https://git.yoctoproject.org/meta-external-toolchain/ + SRC_URI = "\ file://SUPPORTED \ file://makedbs.sh \ @@ -253,6 +255,10 @@ FILES:${PN}-staticdev = "\ ${libdir}/libmcheck.a \ " +# For glibc-2.38, `libm.a` is a link script pointing to `libm-*.a`. +# to avoid calling `libm.a` failure, we need add `libm-*.a` +FILES:${PN}-staticdev:append = " ${libdir}/libm-*.a" + FILES:${PN}-dev += "\ ${libc_baselibs_dev} \ ${libdir}/libcidn${SOLIBSDEV} \ diff --git a/meta-openeuler/recipes-gnome/gnome/adwaita-icon-theme_%.bbappend b/meta-openeuler/recipes-gnome/gnome/adwaita-icon-theme_%.bbappend new file mode 100644 index 0000000000000000000000000000000000000000..abcbc6b11a9aba8bbe0ea36ce00af475543cbfc1 --- /dev/null +++ b/meta-openeuler/recipes-gnome/gnome/adwaita-icon-theme_%.bbappend @@ -0,0 +1,20 @@ +PV = "44.0" + +OPENEULER_SRC_URI_REMOVE = "https http git" + +FILESEXTRAPATHS:prepend := "${THISDIR}/files/:" + +SRC_URI:remove = " \ + file://0001-Run-installation-commands-as-shell-jobs.patch \ +" + +# add default repo +SRC_URI:prepend = " \ + file://adwaita-icon-theme-${PV}.tar.xz \ +" + +S = "${WORKDIR}/${BP}" + +DEPENDS += " librsvg " +DEPENDS:remove = "librsvg-native" + diff --git a/meta-openeuler/recipes-gnome/gtk+/gtk+3_%.bbappend b/meta-openeuler/recipes-gnome/gtk+/gtk+3_%.bbappend index 2a6a5b3d30af50444cfbf2ef9b69ce2b990e6d2f..423834000fc46592ca5ded922b2515406f88747a 100644 --- a/meta-openeuler/recipes-gnome/gtk+/gtk+3_%.bbappend +++ b/meta-openeuler/recipes-gnome/gtk+/gtk+3_%.bbappend @@ -16,6 +16,3 @@ PACKAGECONFIG[cups] = ",,cups,cups" PACKAGECONFIG[cloudproviders] = "-Dcloudproviders=true,-Dcloudproviders=false,libcloudproviders" PACKAGECONFIG[tracker3] = "-Dtracker3=true,-Dtracker3=false,tracker,tracker-miners" - -# Missing or unbuildable dependency chain was: ['gtk+3', 'adwaita-icon-theme-symbolic', 'librsvg-native', 'cargo-native', 'cargo-bin-native-x86_64'] -GTKBASE_RRECOMMENDS:remove = "adwaita-icon-theme-symbolic" diff --git a/meta-openeuler/recipes-gnome/libnotify/libnotify_%.bbappend b/meta-openeuler/recipes-gnome/libnotify/libnotify_%.bbappend new file mode 100644 index 0000000000000000000000000000000000000000..3e7f994c759d10d7a20c049937048d0668daa31f --- /dev/null +++ b/meta-openeuler/recipes-gnome/libnotify/libnotify_%.bbappend @@ -0,0 +1,12 @@ +# main bb: yocto-poky/meta/recipes-gnome/libnotify/libnotify_0.7.9.bb + +OPENEULER_SRC_URI_REMOVE = "https http git gitsm" + +PV = "0.8.2" + +SRC_URI += " \ + file://libnotify-${PV}.tar.xz \ +" + +S = "${WORKDIR}/libnotify-${PV}" + diff --git a/meta-openeuler/recipes-gnome/librsvg/files/librsvg.pc.in b/meta-openeuler/recipes-gnome/librsvg/files/librsvg.pc.in new file mode 100644 index 0000000000000000000000000000000000000000..cb8026f603a6bfc57074f2c955cca9891d5e4efd --- /dev/null +++ b/meta-openeuler/recipes-gnome/librsvg/files/librsvg.pc.in @@ -0,0 +1,12 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: librsvg +Description: library that renders svg files +Version: @VERSION@ +Requires: glib-2.0 gio-2.0 gdk-pixbuf-2.0 cairo +Requires.private: +Libs: -L${libdir} -lrsvg-@RSVG_API_MAJOR_VERSION@ -lm +Cflags: -I${includedir}/librsvg-@RSVG_API_VERSION@ diff --git a/meta-openeuler/recipes-gnome/librsvg/librsvg_2.50.5.bb b/meta-openeuler/recipes-gnome/librsvg/librsvg_2.50.5.bb new file mode 100644 index 0000000000000000000000000000000000000000..82f9f778d94ebf17884533fc3f6921f494976ee8 --- /dev/null +++ b/meta-openeuler/recipes-gnome/librsvg/librsvg_2.50.5.bb @@ -0,0 +1,76 @@ +SUMMARY = "An SVG library based on cairo" +DESCRIPTION = "a version use binary from openeuler" +HOMEPAGE = "https://wiki.gnome.org/Projects/LibRsvg" +LICENSE = "LGPLv2+" + +LIC_FILES_CHKSUM = "file://usr/share/licenses/librsvg2/COPYING.LIB;md5=4fbd65380cdd255951079008b364516c" + +REMOTE_RPM_NAME:aarch64 = "librsvg2-2.50.5-3.oe2203sp2.aarch64.rpm" +REMOTE_DEV_RPM_NAME:aarch64 ="librsvg2-devel-2.50.5-3.oe2203sp2.aarch64.rpm" + +REMOTE_RPM_NAME:x86-64 = "librsvg2-2.50.5-3.oe2203sp2.x86_64.rpm" +REMOTE_DEV_RPM_NAME:x86-64 = "librsvg2-devel-2.50.5-3.oe2203sp2.x86_64.rpm" + +SRC_URI[arm64.md5sum] = "cda67a29cf7e551603de840e4605dc55" +SRC_URI[arm64dev.md5sum] = "08d7e9181a0d247077fff5c9bf0dd8de" +SRC_URI[x86.md5sum] = "dd564a81f8796c70212c1c8752485a7b" +SRC_URI[x86dev.md5sum] = "7799c9766b4ea5892ebbbe2e32339a6b" + +INHIBIT_DEFAULT_DEPS = "1" + +inherit pkgconfig + +DEPENDS = "cairo gdk-pixbuf glib-2.0 libcroco libxml2 pango" + +SRC_URI = " \ + file://librsvg.pc.in \ +" + +SRC_URI:append:aarch64 = " \ + https://repo.openeuler.org/openEuler-22.03-LTS-SP2/everything/aarch64/Packages/librsvg2-2.50.5-3.oe2203sp2.aarch64.rpm;name=arm64 \ + https://repo.openeuler.org/openEuler-22.03-LTS-SP2/everything/aarch64/Packages/librsvg2-devel-2.50.5-3.oe2203sp2.aarch64.rpm;name=arm64dev \ +" + +SRC_URI:append:x86-64 = " \ + https://repo.openeuler.org/openEuler-22.03-LTS-SP2/everything/x86_64/Packages/librsvg2-2.50.5-3.oe2203sp2.x86_64.rpm;name=x86 \ + https://repo.openeuler.org/openEuler-22.03-LTS-SP2/everything/x86_64/Packages/librsvg2-devel-2.50.5-3.oe2203sp2.x86_64.rpm;name=x86dev \ +" + +S = "${WORKDIR}" + +do_install:append() { + install -d ${D}${includedir} + cp -rf -P ${S}/${includedir}/* ${D}${includedir} + + install -d ${D}${libdir} + cp -rf -P ${S}/${libdir}/* ${D}${libdir} + + install -d ${D}${datadir} + cp -rf -P ${S}/${datadir}/* ${D}${datadir} + + sed \ + -e s#@VERSION@#${PV}# \ + -e s#@RSVG_API_MAJOR_VERSION@#2# \ + -e s#@RSVG_API_VERSION@#2.0# \ + -e s#@prefix@#${prefix}# \ + -e s#@exec_prefix@#${exec_prefix}# \ + -e s#@libdir@#${libdir}# \ + -e s#@includedir@#${includedir}# \ + ${WORKDIR}/librsvg.pc.in > ${WORKDIR}/librsvg-2.0.pc + + install -d ${D}${libdir}/pkgconfig + install -m 0644 ${WORKDIR}/librsvg-2.0.pc ${D}${libdir}/pkgconfig/ +} + +FILES:${PN} = " \ + ${datadir} \ + ${libdir} \ +" + +FILES:${PN}-dev = " \ + ${libdir}/librsvg-2.so \ + ${includedir} \ +" + +INSANE_SKIP:${PN} += "already-stripped dev-deps" + diff --git a/meta-openeuler/recipes-graphics/menu-cache/menu-cache_%.bbappend b/meta-openeuler/recipes-graphics/menu-cache/menu-cache_%.bbappend new file mode 100644 index 0000000000000000000000000000000000000000..6ef8fb65fdd506ac16f543bf81c164c74f9051d9 --- /dev/null +++ b/meta-openeuler/recipes-graphics/menu-cache/menu-cache_%.bbappend @@ -0,0 +1,14 @@ +# main bb: yocto-poky/meta/recipes-graphics/menu-cache/menu-cache_1.1.0.bb + +OPENEULER_SRC_URI_REMOVE = "https http git gitsm" + +PV = "1.1.0" + +# can't apply from src-openeuler +# menu-cache-1.1.0-0001-Support-gcc10-compilation.patch +SRC_URI += " \ + file://menu-cache-${PV}.tar.xz \ +" + +S = "${WORKDIR}/menu-cache-${PV}" + diff --git a/meta-openeuler/recipes-graphics/startup-notification/startup-notification_%.bbappend b/meta-openeuler/recipes-graphics/startup-notification/startup-notification_%.bbappend new file mode 100644 index 0000000000000000000000000000000000000000..2d7b92bc9dbc08e390e31e0c72055d522650551d --- /dev/null +++ b/meta-openeuler/recipes-graphics/startup-notification/startup-notification_%.bbappend @@ -0,0 +1,12 @@ +# main bb: yocto-poky/meta/recipes-graphics/startup-notification/startup-notification_0.12.bb + +OPENEULER_SRC_URI_REMOVE = "https http git gitsm" + +PV = "0.12" + +SRC_URI += " \ + file://startup-notification-${PV}.tar.gz \ +" + +S = "${WORKDIR}/startup-notification-${PV}" + diff --git a/meta-openeuler/recipes-graphics/wayland/weston_%.bbappend b/meta-openeuler/recipes-graphics/wayland/weston_%.bbappend index bfabc1b94dcf83648783faae7ad6bba48f4562b1..7c2905b5f9ebd62f2a8134ea89a1b301da438b29 100644 --- a/meta-openeuler/recipes-graphics/wayland/weston_%.bbappend +++ b/meta-openeuler/recipes-graphics/wayland/weston_%.bbappend @@ -14,6 +14,8 @@ SRC_URI[sha256sum] = "7518b49b2eaa1c3091f24671bdcc124fd49fc8f1af51161927afa4329c # keep as 8.0.0 EXTRA_OEMESON += "-Dbackend-default=auto" +PACKAGECONFIG:append = " launch fbdev" + PACKAGECONFIG[fbdev] = "-Dbackend-fbdev=true,-Dbackend-fbdev=false,udev mtdev" PACKAGECONFIG[launch] = "-Dweston-launch=true,-Dweston-launch=false,drm" @@ -22,7 +24,6 @@ PACKAGECONFIG[launcher-libseat] = "" # openeuler customization -DEPENDS:remove = "gdk-pixbuf" SRC_URI:append = "file://openeuler.png \ " diff --git a/meta-openeuler/recipes-graphics/xorg-lib/libxkbcommon_%.bbappend b/meta-openeuler/recipes-graphics/xorg-lib/libxkbcommon_%.bbappend index e6996c92f9d57610caea0e6664b9c382345b6655..90a4e04a320d692bd67ff0407d7e75d3399d48c4 100644 --- a/meta-openeuler/recipes-graphics/xorg-lib/libxkbcommon_%.bbappend +++ b/meta-openeuler/recipes-graphics/xorg-lib/libxkbcommon_%.bbappend @@ -1,4 +1,4 @@ # version in src-openEuler -PV = "1.3.1" +PV = "1.5.0" -SRC_URI[sha256sum] = "b3c710d27a2630054e1e1399c85b7f330ef03359b460f0c1b3b587fd01fe9234" +SRC_URI[sha256sum] = "560f11c4bbbca10f495f3ef7d3a6aa4ca62b4f8fb0b52e7d459d18a26e46e017" diff --git a/meta-openeuler/recipes-kernel/kern-tools/files/yocto-kernel-tools.tar.gz b/meta-openeuler/recipes-kernel/kern-tools/files/yocto-kernel-tools.tar.gz index 8fac6cf847f08ed5b87773ae78ac4a6b3ec71c2d..045258a28b4a9e05d8d4a8e0f325eea7cbd4f84c 100644 Binary files a/meta-openeuler/recipes-kernel/kern-tools/files/yocto-kernel-tools.tar.gz and b/meta-openeuler/recipes-kernel/kern-tools/files/yocto-kernel-tools.tar.gz differ diff --git a/meta-openeuler/recipes-kernel/kern-tools/kern-tools-native_%.bbappend b/meta-openeuler/recipes-kernel/kern-tools/kern-tools-native_%.bbappend index 5b58bbbede68d8ca00aee5bf658beca53cc65505..2bd6c706d7f6bf0b4253d21e8b07b775a3f6e774 100644 --- a/meta-openeuler/recipes-kernel/kern-tools/kern-tools-native_%.bbappend +++ b/meta-openeuler/recipes-kernel/kern-tools/kern-tools-native_%.bbappend @@ -2,9 +2,9 @@ FILESEXTRAPATHS:prepend := "${THISDIR}/files:" -# avoid parse filespath error after adding FILESEXTRAPATHS -PV = "0.2" +# # avoid parse filespath error after adding FILESEXTRAPATHS +PV = "0.3" SRC_URI = "file://yocto-kernel-tools.tar.gz" -SRC_URI[sha256sum] = "740f0b7479264fa47b03f2b8094139785a64682ac7218698d0774c47c4d1d4ea" +SRC_URI[sha256sum] = "063c28a7d1c9520ccfeaf2666b244cdeb1c7a1990224d7425f88a119de5f8edd" diff --git a/meta-openeuler/recipes-kernel/linux/files/config/x86/defconfig b/meta-openeuler/recipes-kernel/linux/files/config/x86/defconfig index 91a47d80dbba89f76d70762b08b38fb47fb26925..a18f7527ccc2fce9d580965453be666ba9f3f99b 100644 --- a/meta-openeuler/recipes-kernel/linux/files/config/x86/defconfig +++ b/meta-openeuler/recipes-kernel/linux/files/config/x86/defconfig @@ -163,6 +163,7 @@ CONFIG_CGROUP_SCHED=y CONFIG_FAIR_GROUP_SCHED=y CONFIG_CFS_BANDWIDTH=y CONFIG_RT_GROUP_SCHED=y +# CONFIG_QOS_SCHED_DYNAMIC_AFFINITY is not set CONFIG_CGROUP_PIDS=y CONFIG_CGROUP_RDMA=y CONFIG_CGROUP_FREEZER=y @@ -316,7 +317,7 @@ CONFIG_X86_FEATURE_NAMES=y CONFIG_X86_X2APIC=y CONFIG_X86_MPPARSE=y # CONFIG_GOLDFISH is not set -# CONFIG_X86_CPU_RESCTRL is not set +CONFIG_X86_CPU_RESCTRL=y CONFIG_X86_EXTENDED_PLATFORM=y # CONFIG_X86_NUMACHIP is not set # CONFIG_X86_VSMP is not set @@ -570,6 +571,7 @@ CONFIG_HAVE_ACPI_APEI_NMI=y # CONFIG_ACPI_CONFIGFS is not set # CONFIG_PMIC_OPREGION is not set CONFIG_X86_PM_TIMER=y +CONFIG_ACPI_PRMT=y # CONFIG_SFI is not set # @@ -1521,6 +1523,7 @@ CONFIG_FW_CACHE=y CONFIG_ALLOW_DEV_COREDUMP=y # CONFIG_DEBUG_DRIVER is not set # CONFIG_DEBUG_DEVRES is not set +# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set # CONFIG_TEST_ASYNC_DRIVER_PROBE is not set CONFIG_GENERIC_CPU_AUTOPROBE=y CONFIG_GENERIC_CPU_VULNERABILITIES=y @@ -1802,6 +1805,7 @@ CONFIG_MEGARAID_MM=m CONFIG_MEGARAID_MAILBOX=m CONFIG_MEGARAID_LEGACY=m CONFIG_MEGARAID_SAS=y +# CONFIG_SCSI_3SNIC_SSSRAID is not set CONFIG_SCSI_MPT3SAS=m CONFIG_SCSI_MPT2SAS_MAX_SGE=128 CONFIG_SCSI_MPT3SAS_MAX_SGE=128 @@ -2034,6 +2038,7 @@ CONFIG_MDIO=m CONFIG_NET_VENDOR_3COM=y # CONFIG_VORTEX is not set # CONFIG_TYPHOON is not set +# CONFIG_NET_VENDOR_3SNIC is not set CONFIG_NET_VENDOR_ADAPTEC=y # CONFIG_ADAPTEC_STARFIRE is not set CONFIG_NET_VENDOR_AGERE=y @@ -2103,6 +2108,7 @@ CONFIG_NET_VENDOR_GOOGLE=y # CONFIG_GVE is not set CONFIG_NET_VENDOR_HUAWEI=y # CONFIG_HINIC is not set +# CONFIG_HINIC3 is not set # CONFIG_BMA is not set CONFIG_NET_VENDOR_I825XX=y CONFIG_NET_VENDOR_INTEL=y @@ -2228,6 +2234,7 @@ CONFIG_NET_VENDOR_WIZNET=y CONFIG_NET_VENDOR_XILINX=y # CONFIG_XILINX_AXI_EMAC is not set # CONFIG_XILINX_LL_TEMAC is not set +# CONFIG_NET_VENDOR_NEBULA_MATRIX is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set # CONFIG_NET_SB1000 is not set @@ -2385,6 +2392,7 @@ CONFIG_WLAN_VENDOR_QUANTENNA=y # CONFIG_HYPERV_NET is not set # CONFIG_NETDEVSIM is not set CONFIG_NET_FAILOVER=m +# CONFIG_NET_LOCALIP_LST is not set # CONFIG_ISDN is not set # @@ -2870,6 +2878,7 @@ CONFIG_PTP_1588_CLOCK_KVM=m # CONFIG_PTP_1588_CLOCK_IDT82P33 is not set # CONFIG_PTP_1588_CLOCK_IDTCM is not set # CONFIG_PTP_1588_CLOCK_VMW is not set +# CONFIG_PTP_HISI is not set # end of PTP clock support CONFIG_PINCTRL=y @@ -4259,6 +4268,7 @@ CONFIG_MXM_WMI=m CONFIG_PMC_ATOM=y # CONFIG_CHROME_PLATFORMS is not set # CONFIG_MELLANOX_PLATFORM is not set +CONFIG_LOONGARCH_PLATFORM_DEVICES=y CONFIG_HAVE_CLK=y CONFIG_CLKDEV_LOOKUP=y CONFIG_HAVE_CLK_PREPARE=y @@ -4365,6 +4375,7 @@ CONFIG_HYPERV_IOMMU=y # # Hisilicon SoC driver support # +# CONFIG_HISI_HBMCACHE is not set # end of Hisilicon SoC driver support # end of SOC (System On Chip) specific Drivers @@ -4471,6 +4482,7 @@ CONFIG_EXT4_USE_FOR_EXT2=y CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_EXT4_FS_SECURITY=y # CONFIG_EXT4_DEBUG is not set +# CONFIG_EXT4_MITIGATION_FALSE_SHARING is not set CONFIG_JBD2=y # CONFIG_JBD2_DEBUG is not set CONFIG_FS_MBCACHE=y @@ -4560,6 +4572,7 @@ CONFIG_PROC_SYSCTL=y CONFIG_PROC_PAGE_MONITOR=y # CONFIG_PROC_CHILDREN is not set CONFIG_PROC_PID_ARCH_STATUS=y +CONFIG_PROC_CPU_RESCTRL=y CONFIG_KERNFS=y CONFIG_SYSFS=y CONFIG_TMPFS=y @@ -4794,6 +4807,7 @@ CONFIG_SECURITY_SELINUX_SID2STR_CACHE_SIZE=256 CONFIG_SECURITY_YAMA=y # CONFIG_SECURITY_SAFESETID is not set # CONFIG_SECURITY_LOCKDOWN_LSM is not set +# CONFIG_SECURITY_LANDLOCK is not set CONFIG_INTEGRITY=y # CONFIG_INTEGRITY_SIGNATURE is not set CONFIG_INTEGRITY_AUDIT=y @@ -5232,6 +5246,7 @@ CONFIG_SECTION_MISMATCH_WARN_ONLY=y CONFIG_FRAME_POINTER=y CONFIG_STACK_VALIDATION=y # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# CONFIG_PGO_KERNEL is not set # end of Compile-time checks and compiler options # diff --git a/meta-openeuler/recipes-kernel/linux/files/meta-data/features/debug/devmem.cfg b/meta-openeuler/recipes-kernel/linux/files/meta-data/features/debug/devmem.cfg new file mode 100644 index 0000000000000000000000000000000000000000..0f6b52335b670f1df6e43938ef2679679fb4f041 --- /dev/null +++ b/meta-openeuler/recipes-kernel/linux/files/meta-data/features/debug/devmem.cfg @@ -0,0 +1,5 @@ +# +# allow devmem +# + +# CONFIG_STRICT_DEVMEM is not set diff --git a/meta-openeuler/recipes-kernel/linux/files/meta-data/features/debug/devmem.scc b/meta-openeuler/recipes-kernel/linux/files/meta-data/features/debug/devmem.scc new file mode 100644 index 0000000000000000000000000000000000000000..1cd2ede0245676ae61b067673b97b00c6f66453d --- /dev/null +++ b/meta-openeuler/recipes-kernel/linux/files/meta-data/features/debug/devmem.scc @@ -0,0 +1,4 @@ +define KFEATURE_DESCRIPTION "Allow devmem" +define KFEATURE_COMPATBILIY all + +kconf non-hardware devmem.cfg diff --git a/meta-openeuler/recipes-kernel/linux/files/meta-data/features/preempt-rt/preempt-rt.cfg b/meta-openeuler/recipes-kernel/linux/files/meta-data/features/preempt-rt/preempt-rt.cfg new file mode 100644 index 0000000000000000000000000000000000000000..adbf7d702932089f9a18043952ed17799554ce04 --- /dev/null +++ b/meta-openeuler/recipes-kernel/linux/files/meta-data/features/preempt-rt/preempt-rt.cfg @@ -0,0 +1,4 @@ +# +# preempt-rt related kernel config +# +CONFIG_PREEMPT_RT=y diff --git a/meta-openeuler/recipes-kernel/linux/files/meta-data/features/preempt-rt/preempt-rt.scc b/meta-openeuler/recipes-kernel/linux/files/meta-data/features/preempt-rt/preempt-rt.scc new file mode 100644 index 0000000000000000000000000000000000000000..e4bbb6c4520c9a7748b3c12c212b912d90147e2a --- /dev/null +++ b/meta-openeuler/recipes-kernel/linux/files/meta-data/features/preempt-rt/preempt-rt.scc @@ -0,0 +1,4 @@ +define KFEATURE_DESCRIPTION "Enable preempt related configs" +define KFEATURE_COMPATBILIY all + +kconf non-hardware preempt-rt.cfg diff --git a/meta-openeuler/recipes-kernel/linux/linux-openeuler-rt.bb b/meta-openeuler/recipes-kernel/linux/linux-openeuler-rt.bb index 0b64a1d5afbed32c8f783e2756de1b7fa77bdf49..5c8415b13142a4aec9cb3d9ef400949a7c369865 100644 --- a/meta-openeuler/recipes-kernel/linux/linux-openeuler-rt.bb +++ b/meta-openeuler/recipes-kernel/linux/linux-openeuler-rt.bb @@ -12,6 +12,5 @@ SRC_URI:append:x86-64 = " \ COMPATIBLE_MACHINE = "qemu-aarch64|generic-x86-64" -do_configure:prepend() { - sed -i 's/CONFIG_PREEMPT=y/CONFIG_PREEMPT_RT=y/g' .config -} +## Preempt-RT +KERNEL_FEATURES:append = "features/preempt-rt/preempt-rt.scc" diff --git a/meta-openeuler/recipes-kernel/linux/linux-openeuler.inc b/meta-openeuler/recipes-kernel/linux/linux-openeuler.inc index 03a2cc5acff2eb03b847b152af71987290d020f6..85639a017eab7619b8a71aba54c3d0d638d6bde2 100644 --- a/meta-openeuler/recipes-kernel/linux/linux-openeuler.inc +++ b/meta-openeuler/recipes-kernel/linux/linux-openeuler.inc @@ -58,6 +58,11 @@ SRC_URI:append:aarch64 = " \ file://patches/${ARCH}/0001-arm64-add-zImage-support-for-arm64.patch \ " +## DEBUG FEATURES +KERNEL_FEATURES:append = " \ + ${@bb.utils.contains('IMAGE_FEATURES', 'debug-tweaks', 'features/debug/devmem.scc', '', d)} \ +" + ## mcs related patches and configs ## mcs_rpmsg.scc: Add basic functionality, including rpmsg, remoteproc ## mcs_jailhouse: Add jailhouse support @@ -113,7 +118,6 @@ KERNEL_LD:append:riscv64 = " ${TOOLCHAIN_OPTIONS}" PACKAGES += "${KERNEL_PACKAGE_NAME}-img" FILES:${KERNEL_PACKAGE_NAME}-img = "/boot/Image-${KERNEL_VERSION}" - do_install:append(){ if [ -e ${KERNEL_OUTPUT_DIR}/Image ]; then install -m 0644 ${KERNEL_OUTPUT_DIR}/Image ${D}/${KERNEL_IMAGEDEST}/Image-${KERNEL_VERSION} diff --git a/meta-openeuler/recipes-lxde/gpicview/files/gpicview-0.2.5.tar.xz b/meta-openeuler/recipes-lxde/gpicview/files/gpicview-0.2.5.tar.xz new file mode 100644 index 0000000000000000000000000000000000000000..ebf53b00f78da672012fb4c66eb248000652e56c Binary files /dev/null and b/meta-openeuler/recipes-lxde/gpicview/files/gpicview-0.2.5.tar.xz differ diff --git a/meta-openeuler/recipes-lxde/gpicview/gpicview/remove-gdk-x11.patch b/meta-openeuler/recipes-lxde/gpicview/gpicview/remove-gdk-x11.patch new file mode 100644 index 0000000000000000000000000000000000000000..a1f97b304dd5a0aa9936db4ba848967b82062907 --- /dev/null +++ b/meta-openeuler/recipes-lxde/gpicview/gpicview/remove-gdk-x11.patch @@ -0,0 +1,136 @@ +For xwayland gdk/gdkx.h does not work. +Remove the more elaborate gf_display_get_workarea function and use only +the fallback. +--- ./src/working-area.c.orig 2016-02-20 22:38:31.000000000 +0000 ++++ ./src/working-area.c 2020-01-07 13:37:47.023817524 +0000 +@@ -23,126 +23,11 @@ + */ + + # include +-# include +-# include +-# include +-# include +- +-void get_working_area(GdkScreen* screen, GdkRectangle *rect); +- +-static gboolean gf_display_get_workarea(GdkScreen* g_screen, GdkRectangle *rect) { +- Atom xa_desktops, xa_current, xa_workarea, xa_type; +- Display *x_display; +- Window x_root; +- guint32 desktops = 0, current = 0; +- gulong *workareas, len, fill; +- guchar *data; +- gint format; +- +- GdkDisplay *g_display; +- Screen *x_screen; +- +- /* get the gdk display */ +- g_display = gdk_display_get_default(); +- if(!g_display) +- return FALSE; +- +- /* get the x display from the gdk display */ +- x_display = gdk_x11_display_get_xdisplay(g_display); +- if(!x_display) +- return FALSE; +- +- /* get the x screen from the gdk screen */ +- x_screen = gdk_x11_screen_get_xscreen(g_screen); +- if(!x_screen) +- return FALSE; +- +- /* get the root window from the screen */ +- x_root = XRootWindowOfScreen(x_screen); +- +- /* find the _NET_NUMBER_OF_DESKTOPS atom */ +- xa_desktops = XInternAtom(x_display, "_NET_NUMBER_OF_DESKTOPS", True); +- if(xa_desktops == None) +- return FALSE; +- +- /* get the number of desktops */ +- if(XGetWindowProperty(x_display, x_root, xa_desktops, 0, 1, False, +- XA_CARDINAL, &xa_type, &format, &len, &fill, +- &data) != Success) +- { +- return FALSE; +- } +- +- if(!data) +- return FALSE; +- +- desktops = *(guint32 *)data; +- XFree(data); +- +- /* find the _NET_CURRENT_DESKTOP atom */ +- xa_current = XInternAtom(x_display, "_NET_CURRENT_DESKTOP", True); +- if(xa_current == None) +- return FALSE; +- +- /* get the current desktop */ +- if(XGetWindowProperty(x_display, x_root, xa_current, 0, 1, False, +- XA_CARDINAL, &xa_type, &format, &len, &fill, +- &data) != Success) +- { +- return FALSE; +- } +- +- if(!data) +- return FALSE; +- +- current = *(guint32 *)data; +- XFree(data); +- +- /* find the _NET_WORKAREA atom */ +- xa_workarea = XInternAtom(x_display, "_NET_WORKAREA", True); +- if(xa_workarea == None) +- return FALSE; +- +- if(XGetWindowProperty(x_display, x_root, xa_workarea, 0, (glong)(4 * 32), +- False, AnyPropertyType, &xa_type, &format, &len, +- &fill, &data) != Success) +- { +- return FALSE; +- } +- +- /* make sure the type and format are good */ +- if(xa_type == None || format == 0) +- return FALSE; +- +- /* make sure we don't have any leftovers */ +- if(fill) +- return FALSE; +- +- /* make sure len divides evenly by 4 */ +- if(len % 4) +- return FALSE; +- +- /* it's good, lets use it */ +- workareas = (gulong *)(guint32 *)data; +- +- rect->x = (guint32)workareas[current * 4]; +- rect->y = (guint32)workareas[current * 4 + 1]; +- rect->width = (guint32)workareas[current * 4 + 2]; +- rect->height = (guint32)workareas[current * 4 + 3]; +- +- /* clean up our memory */ +- XFree(data); +- +- return TRUE; +-} + + void get_working_area(GdkScreen* screen, GdkRectangle *rect) + { +- if( !gf_display_get_workarea(screen, rect) ) +- { +- rect->x = 0; +- rect->y = 0; +- rect->width = gdk_screen_width(); +- rect->height = gdk_screen_height(); +- } ++ rect->x = 0; ++ rect->y = 0; ++ rect->width = gdk_screen_width(); ++ rect->height = gdk_screen_height(); + } diff --git a/meta-openeuler/recipes-lxde/gpicview/gpicview_%.bbappend b/meta-openeuler/recipes-lxde/gpicview/gpicview_%.bbappend new file mode 100644 index 0000000000000000000000000000000000000000..bac3e0f4c2eceffddb248bb395ffa9ff8de0a7ff --- /dev/null +++ b/meta-openeuler/recipes-lxde/gpicview/gpicview_%.bbappend @@ -0,0 +1,15 @@ +# main bb: meta-lxde/recipes-lxde/gpicview/gpicview_0.2.5.bb +# ref: git://git.toradex.com/meta-lxde.git + +OPENEULER_SRC_URI_REMOVE = "https http git gitsm" + +FILESEXTRAPATHS:prepend := "${THISDIR}/files/:" + +PV = "0.2.5" + +SRC_URI += " \ + file://gpicview-${PV}.tar.xz \ +" + +S = "${WORKDIR}/gpicview-${PV}" + diff --git a/meta-openeuler/recipes-lxde/gpicview/gpicview_0.2.5.bb b/meta-openeuler/recipes-lxde/gpicview/gpicview_0.2.5.bb new file mode 100644 index 0000000000000000000000000000000000000000..53d996fb76a8e0abfb3b4aefb80f653832b79054 --- /dev/null +++ b/meta-openeuler/recipes-lxde/gpicview/gpicview_0.2.5.bb @@ -0,0 +1,24 @@ +SUMMARY = "Simple Image Viewer for X" +HOMEPAGE = "http://lxde.sourceforge.net/gpicview" +SECTION = "x11" + +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552" + +DEPENDS = "glib-2.0-native intltool-native jpeg" +RDEPENDS:${PN} = "adwaita-icon-theme" + +SRC_URI = " \ + ${SOURCEFORGE_MIRROR}/lxde/${P}.tar.xz \ + file://remove-gdk-x11.patch \ +" +SRC_URI[md5sum] = "26be9b0c5a234f1afe7d83d02a4a33f4" +SRC_URI[sha256sum] = "38466058e53702450e5899193c4b264339959b563dd5cd81f6f690de32d82942" + +PACKAGECONFIG ?= "gtk3" +PACKAGECONFIG[gtk2] = ",,gtk+" +PACKAGECONFIG[gtk3] = "--enable-gtk3,,gtk+3" + +inherit autotools gettext mime-xdg pkgconfig + +FILES:${PN} += "${datadir}/icons/*" diff --git a/meta-openeuler/recipes-lxde/lxtask/lxtask_%.bbappend b/meta-openeuler/recipes-lxde/lxtask/lxtask_%.bbappend new file mode 100644 index 0000000000000000000000000000000000000000..ac3f1b69e809a8c9d337817588b2db810f2dd09b --- /dev/null +++ b/meta-openeuler/recipes-lxde/lxtask/lxtask_%.bbappend @@ -0,0 +1,13 @@ +# main bb: meta-lxde/recipes-lxde/lxtask/lxtask_0.1.10.bb +# ref: git://git.toradex.com/meta-lxde.git + +OPENEULER_SRC_URI_REMOVE = "https http git gitsm" + +PV = "0.1.10" + +SRC_URI += " \ + file://lxtask-${PV}.tar.xz \ +" + +S = "${WORKDIR}/lxtask-${PV}" + diff --git a/meta-openeuler/recipes-lxde/lxtask/lxtask_0.1.10.bb b/meta-openeuler/recipes-lxde/lxtask/lxtask_0.1.10.bb new file mode 100644 index 0000000000000000000000000000000000000000..fa30ec351ed5ace69e3f06e1812096a97b3ae419 --- /dev/null +++ b/meta-openeuler/recipes-lxde/lxtask/lxtask_0.1.10.bb @@ -0,0 +1,22 @@ +SUMMARY = "LXDE task manager" +HOMEPAGE = "http://lxde.org/" +SECTION = "x11" + +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263" + +DEPENDS = "glib-2.0 glib-2.0-native intltool-native virtual/libintl" + +SRC_URI = "${SOURCEFORGE_MIRROR}/lxde/lxtask-${PV}.tar.xz" +SRC_URI[md5sum] = "27b5258847afc237a5b89666e7a8b45b" +SRC_URI[sha256sum] = "2216df9bc4bb2d80733e788966512ac58c421e0a0a1ff85210f34a29d1eb4e2c" + +PACKAGECONFIG ?= "gtk3" +PACKAGECONFIG[gtk3] = "--enable-gtk3,,gtk+3" +python __anonymous () { + depends = d.getVar("DEPENDS", d, 1) + if 'gtk3' not in d.getVar('PACKAGECONFIG', True): + d.setVar("DEPENDS", "%s gtk+" % depends) +} + +inherit autotools pkgconfig gettext diff --git a/meta-openeuler/recipes-lxde/lxterminal/lxterminal/0002-man-Makefile.am-don-t-error-out-on-missing-man-depen.patch b/meta-openeuler/recipes-lxde/lxterminal/lxterminal/0002-man-Makefile.am-don-t-error-out-on-missing-man-depen.patch new file mode 100644 index 0000000000000000000000000000000000000000..23c9d184482ded7f49b4b01ff32a9020a17a2637 --- /dev/null +++ b/meta-openeuler/recipes-lxde/lxterminal/lxterminal/0002-man-Makefile.am-don-t-error-out-on-missing-man-depen.patch @@ -0,0 +1,30 @@ +From 6a8e9ac7f01e92e8a06108753819dbd13eb2da74 Mon Sep 17 00:00:00 2001 +From: Max Krummenacher +Date: Wed, 25 Jan 2017 15:08:41 +0100 +Subject: [PATCH 2/2] man/Makefile.am: don't error out on missing man + dependency + +Signed-off-by: Max Krummenacher +--- + man/Makefile.am | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/man/Makefile.am b/man/Makefile.am +index fd9fea0..54bb786 100644 +--- a/man/Makefile.am ++++ b/man/Makefile.am +@@ -20,9 +20,10 @@ else + $(man_MANS): + @echo "" + @echo "Error: you need to run configure with '--enable-man'" ++ @echo " and the right dependencies installed" + @echo " in order to regenerate man pages." + @echo "" +- @false ++ @echo "man page was not built" > $(man_MANS) + endif + + +-- +2.5.5 + diff --git a/meta-openeuler/recipes-lxde/lxterminal/lxterminal_%.bbappend b/meta-openeuler/recipes-lxde/lxterminal/lxterminal_%.bbappend new file mode 100644 index 0000000000000000000000000000000000000000..e120ed3b6c53f823f8e41f88b5bda8a64be64117 --- /dev/null +++ b/meta-openeuler/recipes-lxde/lxterminal/lxterminal_%.bbappend @@ -0,0 +1,13 @@ +# main bb: meta-lxde/recipes-lxde/lxterminal/lxterminal_0.3.2.bb +# ref: git://git.toradex.com/meta-lxde.git + +OPENEULER_SRC_URI_REMOVE = "https http git gitsm" + +PV = "0.4.0" + +SRC_URI += " \ + file://lxterminal-${PV}.tar.xz \ +" + +S = "${WORKDIR}/lxterminal-${PV}" + diff --git a/meta-openeuler/recipes-lxde/lxterminal/lxterminal_0.3.2.bb b/meta-openeuler/recipes-lxde/lxterminal/lxterminal_0.3.2.bb new file mode 100644 index 0000000000000000000000000000000000000000..084f85c777cad828088459f13de70324bdeeab7f --- /dev/null +++ b/meta-openeuler/recipes-lxde/lxterminal/lxterminal_0.3.2.bb @@ -0,0 +1,21 @@ +SUMMARY = "Lightweight vte-based tabbed terminal emulator for LXDE" +HOMEPAGE = "http://lxde.sf.net" +SECTION = "x11" +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552" + +DEPENDS = "glib-2.0 glib-2.0-native gtk+3 intltool-native vte xmlto-native" + +SRC_URI = " \ + ${SOURCEFORGE_MIRROR}/lxde/lxterminal-${PV}.tar.xz \ + file://0002-man-Makefile.am-don-t-error-out-on-missing-man-depen.patch \ +" +SRC_URI[md5sum] = "62e57c3aafb831505cc1638b2b737cc9" +SRC_URI[sha256sum] = "3166b18493a8e55811b02aa0de825cbbea65e2b628e69006c1a65b98e1bb4484" + +EXTRA_OECONF += "--enable-gtk3 --enable-man" + +FILES:${PN} += "${datadir}/icons/hicolor/128x128/apps/lxterminal.png" + +inherit autotools pkgconfig gettext + diff --git a/meta-openeuler/recipes-mcs/mcs-linux/mcs-km.bb b/meta-openeuler/recipes-mcs/mcs-linux/mcs-km.bb index 064f893626e14bd4d8287e6ee90e0f3822399d21..c947c832dda52fabdbd55d9515c7a96b14871255 100644 --- a/meta-openeuler/recipes-mcs/mcs-linux/mcs-km.bb +++ b/meta-openeuler/recipes-mcs/mcs-linux/mcs-km.bb @@ -44,7 +44,7 @@ do_compile() { # The inherit of module.bbclass will automatically name module packages with # "kernel-module-" prefix as required by the oe-core build environment. - RPROVIDES:${PN} += "kernel-module-mcs-km" +RPROVIDES:${PN}:x86-64 += "kernel-module-eth-i210" RPROVIDES:${PN} += "kernel-module-mcs-remoteproc" RPROVIDES:${PN} += "${@bb.utils.contains('MCS_FEATURES', 'jailhouse', 'kernel-module-mcs-ivshmem', '', d)}" diff --git a/meta-openeuler/recipes-mcs/mcs-linux/mcs-tools.bb b/meta-openeuler/recipes-mcs/mcs-linux/mcs-tools.bb index 411a15a78c642e173756b0efde9ebff72306f6e6..6390bba208efffed8bb4bee2e39674e1c08c99c3 100644 --- a/meta-openeuler/recipes-mcs/mcs-linux/mcs-tools.bb +++ b/meta-openeuler/recipes-mcs/mcs-linux/mcs-tools.bb @@ -12,11 +12,18 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=74b1b7a7ee537a16390ed514498bf23c" ### Build metadata: SRC_URI, SRCDATA, S, B, FILESEXTRAPATHS.... OPENEULER_REPO_NAME = "mcs" -SRC_URI = " \ +SRC_URI:append:aarch64 = " \ file://mcs \ " S = "${WORKDIR}/mcs" +# for x86 +OPENEULER_LOCAL_NAME:x86-64 = "mcs-x86" +SRC_URI:append:x86-64 = " \ + file://mcs-x86 \ + " +S:x86-64 = "${WORKDIR}/mcs-x86" + do_fetch[depends] += "mcs-linux:do_fetch" do_install:aarch64 () { @@ -28,6 +35,11 @@ do_install:aarch64 () { cp ${S}/rtos/arm64/* ${D}/lib/firmware/ } +do_install:x86-64 () { + install -d ${D}/usr/bin + install -m 0755 ${S}/tools/mica ${D}/usr/bin/ +} + FILES:${PN} += "/usr/bin/mica" FILES:${PN} += "/lib/firmware" INSANE_SKIP:${PN} += "already-stripped" diff --git a/meta-openeuler/recipes-multimedia/libsndfile/files/noopus.patch b/meta-openeuler/recipes-multimedia/libsndfile/files/noopus.patch new file mode 100644 index 0000000000000000000000000000000000000000..cb1778bede995f129aefe37b6856e7e63cac7e27 --- /dev/null +++ b/meta-openeuler/recipes-multimedia/libsndfile/files/noopus.patch @@ -0,0 +1,68 @@ +From 593256a3e386a4e17fe26cfbfb813cf4996447d7 Mon Sep 17 00:00:00 2001 +From: Alexander Kanavin +Date: Mon, 4 Apr 2022 19:46:44 +0200 +Subject: [PATCH] Disable opus library + +We don't have opus in OE-Core which causes all the external libs to be disabled +silently. The silent issue is discussed in the link below and hints a patch +to make things configurable may be accepted. + +This patch removing the opus piece at least gets most of the functionality +we previously used back whilst the issue is discussed. + +Upstream-Status: Denied [https://github.com/libsndfile/libsndfile/pull/812] + +Signed-off-by: Richard Purdie +Signed-off-by: Alexander Kanavin +--- + configure.ac | 10 +++++----- + src/ogg_opus.c | 2 +- + 2 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 727b67bc..f9d2e447 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -373,13 +373,13 @@ AS_IF([test -n "$PKG_CONFIG"], [ + enable_external_libs=yes + ]) + +- AS_IF([test "x$ac_cv_flac$ac_cv_ogg$ac_cv_vorbis$ac_cv_vorbisenc$ac_cv_opus" = "xyesyesyesyesyes"], [ ++ AS_IF([test "x$ac_cv_flac$ac_cv_ogg$ac_cv_vorbis$ac_cv_vorbisenc" = "xyesyesyesyes"], [ + HAVE_EXTERNAL_XIPH_LIBS=1 + enable_external_libs=yes + +- EXTERNAL_XIPH_CFLAGS="$FLAC_CFLAGS $VORBIS_CFLAGS $VORBISENC_CFLAGS $SPEEX_CFLAGS $OPUS_CFLAGS $OGG_CFLAGS " +- EXTERNAL_XIPH_LIBS="$FLAC_LIBS $VORBIS_LIBS $VORBISENC_LIBS $SPEEX_LIBS $OPUS_LIBS $OGG_LIBS " +- EXTERNAL_XIPH_REQUIRE="flac ogg vorbis vorbisenc opus" ++ EXTERNAL_XIPH_CFLAGS="$FLAC_CFLAGS $VORBIS_CFLAGS $VORBISENC_CFLAGS $SPEEX_CFLAGS $OGG_CFLAGS " ++ EXTERNAL_XIPH_LIBS="$FLAC_LIBS $VORBIS_LIBS $VORBISENC_LIBS $SPEEX_LIBS $OGG_LIBS " ++ EXTERNAL_XIPH_REQUIRE="flac ogg vorbis vorbisenc" + + if test x$ac_cv_speex = "xyes" ; then + EXTERNAL_XIPH_REQUIRE="$EXTERNAL_XIPH_REQUIRE speex" +@@ -788,7 +788,7 @@ AC_MSG_RESULT([ + + Experimental code : ................... ${enable_experimental:-no} + Using ALSA in example programs : ...... ${enable_alsa:-no} +- External FLAC/Ogg/Vorbis/Opus : ....... ${enable_external_libs:-no} ++ External FLAC/Ogg/Vorbis : ....... ${enable_external_libs:-no} + External MPEG Lame/MPG123 : ........... ${enable_mpeg:-no} + Building Octave interface : ........... ${OCTAVE_BUILD} + +diff --git a/src/ogg_opus.c b/src/ogg_opus.c +index dfa446ee..0d4fe57b 100644 +--- a/src/ogg_opus.c ++++ b/src/ogg_opus.c +@@ -159,7 +159,7 @@ + #include "sfendian.h" + #include "common.h" + +-#if HAVE_EXTERNAL_XIPH_LIBS ++#if 0 + + #include + #include +-- +2.30.2 + diff --git a/meta-openeuler/recipes-multimedia/libsndfile/libsndfile1_%.bbappend b/meta-openeuler/recipes-multimedia/libsndfile/libsndfile1_%.bbappend new file mode 100644 index 0000000000000000000000000000000000000000..8c8be19566d6d969aed203059df9bc824daa21c1 --- /dev/null +++ b/meta-openeuler/recipes-multimedia/libsndfile/libsndfile1_%.bbappend @@ -0,0 +1,20 @@ +# main bb: yocto-poky/meta/recipes-multimedia/libsndfile/libsndfile1_1.0.31.bb + +OPENEULER_SRC_URI_REMOVE = "https http git gitsm" +OPENEULER_LOCAL_NAME = "libsndfile" + +PV = "1.2.0" + +FILESEXTRAPATHS:prepend := "${THISDIR}/files/:" + +# this patch no need for 1.2.0 +SRC_URI:remove = " \ + file://0001-flac-Fix-improper-buffer-reusing-732.patch \ +" + +SRC_URI += " \ + file://${OPENEULER_LOCAL_NAME}/libsndfile-${PV}.tar.xz \ +" + +S = "${WORKDIR}/libsndfile-${PV}" + diff --git a/meta-openeuler/recipes-multimedia/pulseaudio/pulseaudio.inc b/meta-openeuler/recipes-multimedia/pulseaudio/pulseaudio.inc new file mode 100644 index 0000000000000000000000000000000000000000..08a608bab114ab512c3a453a521d3cf863ceea9e --- /dev/null +++ b/meta-openeuler/recipes-multimedia/pulseaudio/pulseaudio.inc @@ -0,0 +1,282 @@ +SUMMARY = "Sound server for Linux and Unix-like operating systems" +DESCRIPTION = "A general purpose sound server intended to run as a middleware \ +between your applications and your hardware devices, either using ALSA or OSS." +HOMEPAGE = "http://www.pulseaudio.org" +SECTION = "libs/multimedia" + +# Most of PulseAudio code is under LGPL-2.1-or-later. There are a few +# exceptions: +# +# The "adrian" echo canceller variant has code under a non-standard permissive +# license. See src/modules/echo-cancel/adrian-license.txt for details. This +# recipe disables the adrian echo canceller to avoid hassle with the unusual +# license. +# +# The src/modules/reserve* and src/pulsecore/rtkit* files are under the MIT +# license. +# +# The src/pulsecore/filter/ directory contains code under the 3-clause BSD +# license. +# +# People who distribute PulseAudio binaries need to also consider that there +# are some dependencies to GPL libraries. LGPL code that depends on GPL +# libraries probably becomes effectively GPL-licensed (at compile-time? or at +# at link-time?). I'm not a lawyer, though, so I'm not sure of the exact +# implications. The GPL dependencies only affect the server, not the client +# library, with the exception of libdbus that affects both. These are the GPL +# library dependencies: +# +# One of the resampler implementations uses libsamplerate. This recipe doesn't +# enable that resampler, however. +# +# One of the database implementations uses gdbm. This recipe doesn't enable +# that database implementation, however. +# +# module-lirc (enabled by PACKAGECONFIG[lirc]) uses LIRC. +# +# module-equalizer-sink uses FFTW. This recipe disables that, however. +# +# The dependency with the most complicated licensing considerations is libdbus. +# When PACKAGECONFIG[dbus] is enabled (like it is by default), libdbus will be +# used by both the server and the client library (libpulse). Does this affect +# applications that use libpulse? It should also be noted that libdbus is +# dual-licensed: either GPL-2.0-or-later or AFL-2.0 terms apply. Whose decision +# is it which of the licenses apply? What a mess. Some people hold the view that +# libdbus is a system library that is covered by the "special exception" in +# GPLv2's section 3, and therefore libdbus's GPL license doesn't affect +# PulseAudio. +LICENSE = "LGPL-2.1-or-later & MIT & BSD-3-Clause" + +LIC_FILES_CHKSUM = "file://LICENSE;md5=0e5cd938de1a7a53ea5adac38cc10c39 \ + file://GPL;md5=4325afd396febcb659c36b49533135d4 \ + file://LGPL;md5=2d5025d4aa3495befef8f17206a5b0a1 \ + file://src/modules/echo-cancel/adrian-license.txt;md5=abbab006a561fbffccedf1c3531f34ab \ + file://src/pulsecore/filter/LICENSE.WEBKIT;md5=49defbaffddf8c51faf606ff7fc3b1f7 \ + file://src/pulsecore/resampler.h;beginline=4;endline=21;md5=09794012ae16912c0270f3280cc8ff84 \ + file://src/modules/reserve.h;beginline=6;endline=28;md5=0e23094760367d51b6609750e9b31fbb \ + file://src/pulsecore/rtkit.h;beginline=6;endline=29;md5=3f00ff966716ae0817c31576d1473528 \ + file://src/modules/echo-cancel/adrian-aec.h;beginline=3;endline=12;md5=d3ed4fad1c073f8b06f37495dc5d1026 \ + file://src/pulsecore/filter/biquad.h;beginline=1;endline=4;md5=6d46d1365206528a20137355924233c1 \ +" + +# libtool is needed for libltdl, used in module loading. +DEPENDS = "m4-native libatomic-ops libsndfile1 libtool" +# optional +DEPENDS += "udev alsa-lib glib-2.0" +DEPENDS += "speexdsp libxml-parser-perl-native libcap" + +inherit bash-completion meson pkgconfig useradd gettext perlnative systemd manpages gsettings + +# *.desktop rules wont be generated during configure and build will fail +# if using --disable-nls +USE_NLS = "yes" + +EXTRA_OEMESON = "\ + -Dhal-compat=false \ + -Dorc=disabled \ + -Daccess_group=audio \ + -Dopenssl=disabled \ + -Ddatabase=simple \ + -Dzshcompletiondir=no \ + -Dudevrulesdir=`pkg-config --variable=udevdir udev`/rules.d \ + -Dvalgrind=disabled \ + -Dtests=false \ + -Drunning-from-build-tree=false \ +" + +# soxr (the SoX Resampler library) doesn't seem to be currently packaged in +# oe-core nor meta-oe, so let's not add a PACKAGECONFIG entry for it for now. +EXTRA_OEMESON += "-Dsoxr=disabled" + +# The FFTW dependency (for module-equalizer-sink) was removed in commit +# ddbd713293 without explaining why it was not made a PACKAGECONFIG item +# instead. Oh well, let's keep it disabled until someone expresses some +# interest in having it enabled. +EXTRA_OEMESON += "-Dfftw=disabled" + +# The "adrian" echo canceller implementation has a non-standard license +# (src/modules/echo-cancel/adrian-license.txt). It's a permissive license, so +# the licensing terms are probably not problematic, but it would be an extra +# hassle to add the license to OE-Core's set of licenses. The canceller isn't +# very good anyway, better alternatives exist (such as the webrtc canceller). +EXTRA_OEMESON += "-Dadrian-aec=false" + +PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez5', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 'avahi', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', '3g', 'ofono', '', d)} \ + ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6 systemd x11', d)} \ + dbus gsettings \ + " + +PACKAGECONFIG[dbus] = "-Ddbus=enabled,-Ddbus=disabled,dbus" +PACKAGECONFIG[bluez5] = "-Dbluez5=enabled,-Dbluez5=disabled,bluez5 sbc" +PACKAGECONFIG[gsettings] = "-Dgsettings=enabled,-Dgsettings=disabled,glib-2.0-native glib-2.0" +PACKAGECONFIG[ofono] = "-Dbluez5-ofono-headset=true,-Dbluez5-ofono-headset=false,ofono" +PACKAGECONFIG[gtk] = "-Dgtk=enabled,-Dgtk=disabled,gtk+3" +PACKAGECONFIG[systemd] = "-Dsystemd=enabled -Dsystemduserunitdir=${systemd_user_unitdir},-Dsystemd=disabled,systemd" +PACKAGECONFIG[x11] = "-Dx11=enabled,-Dx11=disabled,virtual/libx11 libxtst libice libsm libxcb" +PACKAGECONFIG[avahi] = "-Davahi=enabled,-Davahi=disabled,avahi" +PACKAGECONFIG[jack] = "-Djack=enabled,-Djack=disabled,jack" +# Since many embedded systems don't have non-root users, it's useful to be +# able to use pulseaudio autospawn for root as well. +PACKAGECONFIG[autospawn-for-root] = ",,," +PACKAGECONFIG[lirc] = "-Dlirc=enabled,-Dlirc=disabled,lirc" +PACKAGECONFIG[webrtc] = "-Dwebrtc-aec=enabled,-Dwebrtc-aec=disabled,webrtc-audio-processing" +PACKAGECONFIG[ipv6] = "-Dipv6=true,-Dipv6=false," +PACKAGECONFIG[manpages] = "-Dman=true,-Dman=false," + +export TARGET_PFPU = "${TARGET_FPU}" + +set_cfg_value () { + sed -i -e "s/\(; *\)\?$2 =.*/$2 = $3/" "$1" + if ! grep -q "^$2 = $3\$" "$1"; then + die "Use of sed to set '$2' to '$3' in '$1' failed" + fi +} + +do_compile:append () { + if ${@bb.utils.contains('PACKAGECONFIG', 'autospawn-for-root', 'true', 'false', d)}; then + set_cfg_value src/pulse/client.conf allow-autospawn-for-root yes + fi +} + +do_install:append() { + install -d ${D}${sysconfdir}/default/volatiles + install -m 0644 ${WORKDIR}/volatiles.04_pulse ${D}${sysconfdir}/default/volatiles/04_pulse +} + +USERADD_PACKAGES = "pulseaudio-server" +GROUPADD_PARAM:pulseaudio-server = "--system pulse" +USERADD_PARAM:pulseaudio-server = "--system --home /var/run/pulse \ + --no-create-home --shell /bin/false \ + --groups audio,pulse --gid pulse pulse" + +PACKAGES =+ "\ + libpulse \ + libpulse-mainloop-glib \ + libpulse-simple \ + libpulsecommon \ + libpulsecore \ + ${PN}-pa-info \ + ${PN}-server \ + ${PN}-misc \ + " + +# The console-kit module is included here explicitly so bitbake can map to the +# RDEPENDS we define for it in this recipe, and thereby ensure that when +# adding the console-kit module to an image, we also get the necessary +# consolekit package produced. +PACKAGES =+ "${@bb.utils.contains('PACKAGECONFIG', 'dbus', 'pulseaudio-module-console-kit', '', d)}" + +#upgrade path: +RREPLACES:pulseaudio-server = "libpulse-bin libpulse-conf" + +PACKAGES_DYNAMIC += "^pulseaudio-lib-.* ^pulseaudio-module-.*" + +FILES:libpulsecore = "${libdir}/pulseaudio/libpulsecore*.so" +FILES:libpulsecommon = "${libdir}/pulseaudio/libpulsecommon*.so" + +# client.conf configures the behaviour of libpulse, so it belongs in the same +# package. +FILES:libpulse = "${libdir}/libpulse.so.* ${sysconfdir}/pulse/client.conf" + +FILES:libpulse-simple = "${libdir}/libpulse-simple.so.*" +FILES:libpulse-mainloop-glib = "${libdir}/libpulse-mainloop-glib.so.*" + +FILES:${PN}-dev += "${libdir}/pulse-${PV}/modules/*.la ${datadir}/vala" +FILES:${PN}-bin += "${sysconfdir}/default/volatiles/04_pulse" +FILES:${PN}-pa-info = "${bindir}/pa-info" +FILES:${PN}-server = "${bindir}/pulseaudio ${bindir}/start-* ${sysconfdir} ${bindir}/pactl */udev/rules.d/*.rules */*/udev/rules.d/*.rules ${systemd_user_unitdir}/*" + +#SYSTEMD_PACKAGES = "${PN}-server" +SYSTEMD_SERVICE:${PN}-server = "pulseaudio.service" + +FILES:${PN}-misc = "${bindir}/* ${libdir}/pulseaudio/libpulsedsp.so" + +# Allow the pulseaudio package to be created empty as a placeholder (-dbg and -dev depend on it) +FILES:${PN} = "" +ALLOW_EMPTY:${PN} = "1" + +CONFFILES:libpulse = "${sysconfdir}/pulse/client.conf" + +CONFFILES:pulseaudio-server = "\ + ${sysconfdir}/pulse/default.pa \ + ${sysconfdir}/pulse/daemon.conf \ + ${sysconfdir}/pulse/system.pa \ + " + +pkg_postinst:${PN}-server() { + if [ -z "$D" ] && [ -e ${sysconfdir}/init.d/populate-volatile.sh ] ; then + ${sysconfdir}/init.d/populate-volatile.sh update + fi +} + +python populate_packages:prepend() { + plugindir = d.expand('${libdir}/pulseaudio/modules/') + do_split_packages(d, plugindir, r'^module-(.*)\.so$', '${PN}-module-%s', 'PulseAudio module for %s', extra_depends='', prepend=True) + do_split_packages(d, plugindir, r'^lib(.*)\.so$', '${PN}-lib-%s', 'PulseAudio library for %s', extra_depends='', prepend=True) +} + +# pa-info is a bash script that collects information about the audio setup. +# It's primarily useful for attaching an information dump when reporting bugs. +RDEPENDS:${PN}-pa-info = "\ + alsa-utils-amixer \ + alsa-utils-aplay \ + alsa-utils-scripts \ + bash \ + ${PN}-server \ + " + +RDEPENDS:pulseaudio-server = " \ + pulseaudio-module-filter-apply \ + pulseaudio-module-filter-heuristics \ + pulseaudio-module-udev-detect \ + pulseaudio-module-null-sink \ + pulseaudio-module-device-restore \ + pulseaudio-module-stream-restore \ + pulseaudio-module-card-restore \ + pulseaudio-module-augment-properties \ + pulseaudio-module-detect \ + pulseaudio-module-alsa-sink \ + pulseaudio-module-alsa-source \ + pulseaudio-module-alsa-card \ + pulseaudio-module-native-protocol-unix \ + pulseaudio-module-default-device-restore \ + pulseaudio-module-intended-roles \ + pulseaudio-module-rescue-streams \ + pulseaudio-module-always-sink \ + pulseaudio-module-suspend-on-idle \ + pulseaudio-module-position-event-sounds \ + pulseaudio-module-role-cork \ + pulseaudio-module-switch-on-port-available" + +# If the server is installed, it's usually desirable to make ALSA applications +# use PulseAudio. alsa-plugins-pulseaudio-conf will install the configuration +# that makes the PulseAudio plugin the default ALSA device. +RDEPENDS:pulseaudio-server += "${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'alsa-plugins-pulseaudio-conf', '', d)}" + +# pulseaudio-module-console-kit is built whenever dbus is enabled by PACKAGECONFIG +# but consolekit depends on libx11 and is available only for DISTRO with x11 in DISTRO_FEATURES +RDEPENDS:pulseaudio-module-console-kit =+ "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'consolekit', '', d)}" +RDEPENDS:pulseaudio-misc += "pulseaudio-module-cli-protocol-unix" + +FILES:${PN}-module-alsa-card += "${datadir}/pulseaudio/alsa-mixer" + +GSETTINGS_PACKAGE = "${@bb.utils.contains('PACKAGECONFIG', 'gsettings', '${PN}-module-gsettings', '', d)}" +FILES:${PN}-module-gsettings += "${libexecdir}/pulse/gsettings-helper ${datadir}/GConf/gsettings ${datadir}/glib-2.0/schemas" + +# The console-kit module is good to have on X11 systems (it keeps PulseAudio +# running for the duration of the user login session). The device-manager and +# x11-* modules are referenced from the start-pulseaudio-x11 script, so those +# modules must be installed when X11 is enabled. +RDEPENDS:pulseaudio-server += "\ + ${@bb.utils.contains('DISTRO_FEATURES', 'x11', '\ + pulseaudio-module-device-manager \ + pulseaudio-module-x11-cork-request \ + pulseaudio-module-x11-publish \ + pulseaudio-module-x11-xsmp \ + ', '', d)}" + +RDEPENDS:pulseaudio-server += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', \ + bb.utils.contains('DISTRO_FEATURES', 'systemd', 'pulseaudio-module-systemd-login', 'pulseaudio-module-console-kit', d), \ + '', d)}" diff --git a/meta-openeuler/recipes-multimedia/pulseaudio/pulseaudio/0001-client-conf-Add-allow-autospawn-for-root.patch b/meta-openeuler/recipes-multimedia/pulseaudio/pulseaudio/0001-client-conf-Add-allow-autospawn-for-root.patch new file mode 100644 index 0000000000000000000000000000000000000000..33f7709ae4c452e68326265c1e8587543825046f --- /dev/null +++ b/meta-openeuler/recipes-multimedia/pulseaudio/pulseaudio/0001-client-conf-Add-allow-autospawn-for-root.patch @@ -0,0 +1,97 @@ +From babec3a50dd710d26b72f6c6d43bd79b04e954a6 Mon Sep 17 00:00:00 2001 +From: Tanu Kaskinen +Date: Tue, 28 Apr 2015 14:32:43 +0300 +Subject: [PATCH] client-conf: Add allow-autospawn-for-root + +Usually autospawning for root is a bad idea, since it can easily +interfere with other users' PulseAudio instances, but in embedded +environments where only root exists, autospawning is fine. + +Upstream-Status: Denied [Upstream hasn't so far been convinced that +this feature is needed. The view is that running the graphical session +as root doesn't make sense even on embedded systems, or if it does, +running PulseAudio in the system mode should be a good solution for +that use case. If someone can prove otherwise, the patch would +probably be accepted.] + +Signed-off-by: Tanu Kaskinen +--- + man/pulse-client.conf.5.xml.in | 9 +++++++++ + src/pulse/client-conf.c | 1 + + src/pulse/client-conf.h | 1 + + src/pulse/client.conf.in | 1 + + src/pulse/context.c | 2 +- + 5 files changed, 13 insertions(+), 1 deletion(-) + +diff --git a/man/pulse-client.conf.5.xml.in b/man/pulse-client.conf.5.xml.in +index b88898c..e737c96 100644 +--- a/man/pulse-client.conf.5.xml.in ++++ b/man/pulse-client.conf.5.xml.in +@@ -82,6 +82,15 @@ License along with PulseAudio; if not, see . + + + ++ ++