From 62d13640007c409b65911480c52194a0cf1088c8 Mon Sep 17 00:00:00 2001 From: Allan Blanchard <allan.blanchard@cea.fr> Date: Wed, 15 Jun 2022 16:50:21 +0200 Subject: [PATCH] [distrib] improves make-distrib --- .gitlab-ci.yml | 11 ++-- devel_tools/make-distrib.sh | 106 ++++++++++++++++++++++++++++++++---- 2 files changed, 103 insertions(+), 14 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 24b6ca8b6ad..82555d9c220 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -25,6 +25,10 @@ variables: build-distrib-tarball: stage: build + variables: + OPEN_SOURCE: "yes" + CI_LINK: "yes" + HDRCK: "frama-c-hdrck" script: - nix-shell nix/pkgs.nix -A ocaml-ng.ocamlPackages_$OCAML.frama-c-checkers-shell --run 'autoconf && ./devel_tools/make-distrib.sh' @@ -32,7 +36,7 @@ build-distrib-tarball: - nix artifacts: paths: - - frama-c.tar.gz + - ./*.tar.gz expire_in: 1 week check-no-old-frama-c: @@ -240,12 +244,11 @@ manuals: # OCAML: "4_13" # <<: *ocaml - src-distrib-tests: stage: distrib_and_compatibility script: - - mkdir extracted && tar -xzf frama-c.tar.gz -C ./extracted - - nix-build extracted/frama-c/nix/pkgs.nix -A ocaml-ng.ocamlPackages_$OCAML.src-distrib-tests + - mkdir extracted && tar -xzf frama-c.tar.gz --strip-components 1 -C ./extracted + - nix-build extracted/nix/pkgs.nix -A ocaml-ng.ocamlPackages_$OCAML.src-distrib-tests tags: - nix diff --git a/devel_tools/make-distrib.sh b/devel_tools/make-distrib.sh index 840704c4706..42fd20c9282 100755 --- a/devel_tools/make-distrib.sh +++ b/devel_tools/make-distrib.sh @@ -28,21 +28,107 @@ if [ ! -f configure ] ; then exit 2 fi -EXTERNAL_PLUGINS=$(find src/plugins -type d -name ".git" | sed "s/.git//") +################################################################################ +# Configuration -FRAMAC="frama-c.tar" -git archive HEAD -o $FRAMAC --prefix "frama-c/" +if [ -z ${OPEN_SOURCE+x} ]; then + echo "OPEN_SOURCE variable not set, defaults to 'no'" + OPEN_SOURCE="no" +fi + +if [ -z ${HDRCK+x} ]; then + HDRCK="dune exec -- frama-c-hdrck" +fi + +if [ -z ${VERSION+x} ]; then + VERSION=$(cat VERSION | sed "s,~,-,") +fi + +if [ -z ${VERSION_CODENAME+x} ]; then + VERSION_CODENAME=$(cat VERSION_CODENAME) +fi + +if [ -z ${CI_LINK+x} ]; then + CI_LINK="no" +fi -ACC=$FRAMAC +FRAMAC="frama-c-$VERSION-$VERSION_CODENAME" +FRAMAC_TAR="$FRAMAC.tar" + +################################################################################ +# Prepare archive + + +git archive HEAD -o $FRAMAC_TAR --prefix "$FRAMAC/" + +TAR_ACC=$FRAMAC_TAR + +EXTERNAL_PLUGINS=$(find src/plugins -type d -name ".git" | sed "s/\/.git//") for plugin in $EXTERNAL_PLUGINS ; do TAR="$(basename $plugin).tar" - git -C $plugin archive HEAD -o $TAR --prefix "frama-c/$plugin/" - ACC="$ACC $plugin$TAR" + git -C $plugin archive HEAD -o $TAR --prefix "$FRAMAC/$plugin/" + TAR_ACC="$TAR_ACC $plugin/$TAR" +done + +tar --concatenate --file=$TAR_ACC +tar rf $FRAMAC_TAR configure --transform "s,^,$FRAMAC/," + +################################################################################ +# Prepare header options + +if [[ "$OPEN_SOURCE" == "yes" ]]; then + HEADER_KIND="open-source" + HEADER_OPT= +else + HEADER_KIND="close-source" + HEADER_OPT="-update" +fi + +################################################################################ +# Prepare header spec + +HEADER_SPEC="header-spec.txt" +git ls-files -z | git check-attr --stdin -z header_spec > $HEADER_SPEC + +HEADER_DIRS="-header-dirs headers/$HEADER_KIND" + +for plugin in $EXTERNAL_PLUGINS ; do + git -C $plugin ls-files -z |\ + git -C $plugin check-attr --stdin -z header_spec |\ + xargs --null -n3 printf "$plugin/%s\n%s\n%s\n" |\ + tr '\n' '\0' >> $HEADER_SPEC done -tar --concatenate --file=$ACC -tar rf $FRAMAC configure --transform 's,^,frama-c/,' -gzip -9 < $FRAMAC > $FRAMAC.gz +PLUGINS=$(find src/plugins -type d -mindepth 1 -maxdepth 1) + +for plugin in $PLUGINS ; do + HEADER_DIRS="$HEADER_DIRS -header-dirs $plugin/headers/$HEADER_KIND" +done + +################################################################################ +# Headers + +TMP_DIR=$(mktemp -d) +echo $TMP_DIR +tar xf $FRAMAC_TAR -C $TMP_DIR + +$HDRCK $HEADER_OPT $HEADER_DIRS -spec-format="3-zeros" -C "$TMP_DIR/$FRAMAC" $HEADER_SPEC +echo $VERSION > $TMP_DIR/$FRAMAC/VERSION +echo $VERSION_CODENAME > $TMP_DIR/$FRAMAC/VERSION_CODENAME + +################################################################################ +# Finalize archive + +tar czf $FRAMAC_TAR.gz -C $TMP_DIR $FRAMAC + +if [[ "$CI_LINK" == "yes" ]]; then + ln $FRAMAC_TAR.gz "frama-c.tar.gz" +fi + +################################################################################ +# Cleaning -rm -f $ACC +rm -rf $HEADER_SPEC +rm -rf $TAR_ACC +rm -rf $TMP_DIR -- GitLab