diff --git a/tools/auto_build_pkgs.sh b/tools/auto_build_pkgs.sh new file mode 100644 index 0000000000000000000000000000000000000000..bccad0b651a8d98d59260733e1652f1107b981f3 --- /dev/null +++ b/tools/auto_build_pkgs.sh @@ -0,0 +1,99 @@ +#!/bin/sh +set -e + +###error number### +ERROR_NOT_FOUND_PKGS="101" + +###env values### +work_dir=$(realpath $(realpath $(dirname $0))/../) +tools_dir=$work_dir/tools +patches_dir=$work_dir/patches +config_file=$work_dir/conf/aarch32_support_list.yaml +mock_repo_file="/etc/mock/templates/fedora-29.tpl" +output_dir=output +local_repo_dir=$work_dir/$output_dir/repo +download_prefix="https://repo.openeuler.org/openEuler-20.03-LTS/source/Packages" +download_suffix=".oe1.src.rpm" +oe_src_dir="oe_src_dir" + +###build function### +build_pkg() +{ + + local pkg_name=$1 + cat $config_file | grep -i '^- name:' | awk '{print $3}' | grep -w -i $pkg_name > /dev/null || exit $ERROR_NOT_FOUND_PKGS + + local pkg_version=$(cat $config_file | grep "^- name: $pkg_name" -A3 | grep revision | awk '{print $2}') + local rpm_name=$pkg_name-$pkg_version$download_suffix + mkdir -p ./$output_dir/$pkg_name + pushd ./$output_dir/$pkg_name + if [ ! -d $oe_src_dir ] ; + then + mkdir $oe_src_dir + fi + + ###download oe src rpm### + if [ ! -f $oe_src_dir/$rpm_name ];then + wget $download_prefix/$rpm_name -P $oe_src_dir + fi + + if [ ! -f $oe_src_dir $pkg_name.spec ]; + then + ###get old spec### + rpm2cpio $oe_src_dir/$rpm_name | cpio -idm -D $oe_src_dir $pkg_name.spec + + ###patching spec### + patch -d $oe_src_dir/ < $(ls $patches_dir/$pkg_name/spec/*.patch | sort -u) + fi + ###starting build### + mock -r fedora-29-armhfp --resultdir=. ./$oe_src_dir/$rpm_name --spec oe_src_dir/$pkg_name.spec --nocheck --macro-file=$tools_dir/rpmmacros_openeuler --no-cleanup-after + popd +} + +repo_sync() +{ + local list=$1 + local create_flag=0 + local repo_flag=$(cat $mock_repo_file | grep '^\[arm32_extra_repo\]') + if [ ! -n "$repo_flag" ]; + then + sed -i '$i\[arm32_extra_repo]' $mock_repo_file + sed -i "\$i\baseurl=file:\/\/$local_repo_dir" $mock_repo_file + sed -i '$i\gpgcheck=0' $mock_repo_file + sed -i '$i\enabled=1' $mock_repo_file + sed -i '$i\skip_if_unavailable=False' $mock_repo_file + mkdir -p $local_repo_dir + fi + for pkg in $list; + do + if [ -n "$(find $local_repo_dir | grep -i -w $pkg)" ]; + then + continue + fi + find $work_dir/$output_dir/$pkg -maxdepth 1 -name '*.rpm' | xargs -I {} cp {} $local_repo_dir + create_flag=1 + done + if [ $create_flag == 1 ]; + then + createrepo $local_repo_dir + fi +} + + + +pre_pkg_list="" + +if [ $1 != "glibc" ]; +then + build_pkg $1 +else + pre_pkg_list="gcc_secure" + for pkg in $pre_pkg_list + do + build_pkg $pkg + done + + repo_sync $pre_pkg_list + build_pkg $1 +fi + diff --git a/tools/rpmmacros_openeuler b/tools/rpmmacros_openeuler new file mode 100644 index 0000000000000000000000000000000000000000..6d94317e41d87721def5aecc16a0ecb10d13d425 --- /dev/null +++ b/tools/rpmmacros_openeuler @@ -0,0 +1,104 @@ +%openeuler 1 +%openEuler 1 +%rhel_version 800 +%el8 8 +%el7 8 +%rhel 8 +%fedora 0 +%centos 8 +#%fedora_version 0 +#%fedora 0 +%opensuse_bs 1 +%openblas_arches aarch64 x86_64 +#%undefine _annotated_build + +%_vendor openEuler +%_isa %{?__isa:(%{__isa})}%{!?__isa:%{nil}} +%vendor http://openeuler.org +%distribution Huawei openEuler +%packager http://openeuler.org + +#for sign +%_signature gpg +%_gpg_path /home/abuild/.gnupg +%_gpg_name private OBS +%__gpg_sign_cmd %{__gpg} \ + gpg --no-verbose --no-armor \ + %{?_gpg_digest_algo:--digest-algo %{_gpg_digest_algo}} \ + --batch --pinentry-mode=loopback --passphrase="" \ + --no-secmem-warning \ + %{?_gpg_sign_cmd_extra_args:%{_gpg_sign_cmd_extra_args}} \ + -u "%{_gpg_name}" -sbo %{__signature_filename} %{__plaintext_filename} + +#From RedHat buildsys-macros package + +%kernel_module_package_buildreqs kernel-devel redhat-rpm-config + +%with_python3 1 +%with_python2 1 +%python3_pkgversion 3 +#%__os_install_post %{nil} +%python3_pkgversion 3 +%golang_arches %{ix86} x86_64 %{arm} aarch64 ppc64le s390x +%efi_arch aa64 +%efi_vendor openEuler +%efi aarch64 x86_64 +%unsignedaa64 shim-unsigned-aarch64 +%unsignedx64 shim-unsigned-x64 +%unsignedia32 shim-unsigned-ia32 +%shimveraa64 15 +%shimverx64 15 +%shimveria32 15 +%valgrind_arches %{ix86} x86_64 %{arm} aarch64 ppc64le s390x +%mono_arches %{ix86} x86_64 %{arm} aarch64 ppc64le s390x +%openblas_arches %{ix86} x86_64 %{arm} aarch64 ppc64le s390x +%with_ocaml 1 +%dist .oe1 + +%ext_info .gz +%ext_man .gz +#%_unpackaged_files_terminate_build 0 + +%info_add(:-:) test -x /sbin/install-info -a -f %{?2}%{?!2:%{_infodir}}/%{1}%ext_info && /sbin/install-info --info-dir=%{?2}%{?!2:%{_infodir}} %{?2}%{?!2:%{_infodir}}/%{1}%ext_info \ +%{nil} + +%info_del(:-:) test -x /sbin/install-info -a ! -f %{?2}%{?!2:%{_infodir}}/%{1}%ext_info && /sbin/install-info --quiet --delete --info-dir=%{?2}%{?!2:%{_infodir}} %{?2}%{?!2:%{_infodir}}/%{1}%ext_info \ +%{nil} + +%gcc_secure_exclude "podman.spec|gcc.spec|arm-trusted-firmware.spec|docker-engine-openeuler.spec|arts.spec|runc-openeuler.spec|kata-containers.spec|dyninst.spec|ipxe.spec|tboot.spec|syslinux.spec|gcc-libraries.spec|kpatch.spec|gdb.spec|xorg-x11-server.spec|xorg-x11-drv-fbdev.spec|xorg-x11-drv-vesa.spec|xorg-x11-drv-ati.spec|xorg-x11-drv-dummy.spec|xorg-x11-drv-intel.spec|xorg-x11-drv-nouveau.spec|xorg-x11-drv-qxl.spec|xorg-x11-drv-v4l.spec|xorg-x11-drv-vmware.spec|xorg-x11-drv-evdev.spec|xorg-x11-drv-synaptics.spec|xorg-x11-drv-vmmouse.spec|xorg-x11-drv-void.spec|xorg-x11-drv-wacom.spec|hivex.spec|gimp.spec|memstomp.spec|supermin.spec|system-config-firewall.spec|isdn4k-utils.spec|emacs.spec|graphviz.spec|buildah.spec" + +%_build_id_links none + +#custom macros +%openEuler 1 +%disable_rpath \ +sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool \ +sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool + +%delete_la_and_a \ +find $RPM_BUILD_ROOT -type f -name "*.la" -delete \ +find $RPM_BUILD_ROOT -type f -name "*.a" -delete + +%delete_la find $RPM_BUILD_ROOT -type f -name "*.la" -delete + +%chrpath_delete find $RPM_BUILD_ROOT/ -type f -exec file {} ';' | grep "\" | awk -F ':' '{print $1}' | xargs -i chrpath --delete {} + +%package_help \ +%package help \ +Summary: Documents for %{name} \ +Buildarch: noarch \ +Requires: man info \ +\ +%description help \ +Man pages and other related documents for %{name}. + +#%sbin_installinfo_rm bc.info +#%sbin_installinfo_rm bc.info.gz + +%install_info() \ +/sbin/install-info %1 %{_infodir}/dir || : + +%install_info_rm() \ +/sbin/install-info --remove %1 %{_infodir}/dir || : + +%mock_build 1