[gnome-builder] build: start on xdg-app definition



commit 67144b8ac1d4892af3010421392fd75e4dc92baf
Author: Christian Hergert <chergert redhat com>
Date:   Tue Oct 27 00:28:05 2015 -0700

    build: start on xdg-app definition
    
    This is still pretty hacky, but it can be used to start building an
    xdg-app for Builder for which we can distribute as nightlies. Soon, we'll
    need a runtime for 3.20 (3.19.x) so we can depend on gtk+ master.

 build/xdg-app/.gitignore        |    5 +
 build/xdg-app/build.sh          |  220 +++++++++++++++++++++++++++++++++++++++
 build/xdg-app/build_helper.sh   |   38 +++++++
 build/xdg-app/gnome-builder.def |   42 ++++++++
 4 files changed, 305 insertions(+), 0 deletions(-)
---
diff --git a/build/xdg-app/.gitignore b/build/xdg-app/.gitignore
new file mode 100644
index 0000000..1baf879
--- /dev/null
+++ b/build/xdg-app/.gitignore
@@ -0,0 +1,5 @@
+app
+build
+cache
+dl
+repo
diff --git a/build/xdg-app/build.sh b/build/xdg-app/build.sh
new file mode 100755
index 0000000..a3f493a
--- /dev/null
+++ b/build/xdg-app/build.sh
@@ -0,0 +1,220 @@
+#!/bin/bash
+
+set -o nounset
+set -o errexit
+
+contains() {
+  for word in $1; do
+    [[ "$word" = "$2" ]] && return 0
+  done
+  return 1
+}
+
+if [ "$#" -ne 1 ]; then
+    echo "Missing def file"
+fi
+
+DEFS=$1
+
+declare -A OPTS
+declare -A CONFIGURE
+declare -A SOURCES
+declare -A BRANCHES
+declare -A CUSTOM_PREPARE
+
+source "$DEFS"
+
+CHANGED=""
+
+mkdir -p dl
+mkdir -p cache
+cd dl
+
+STARTAT=""
+BODY=""
+
+for MODULE in $MODULES; do
+    echo ========== Updating $MODULE ================
+    URL=${SOURCES[$MODULE]}
+    BRANCH=${BRANCHES[$MODULE]-master}
+    BASENAME=`basename $URL`
+    if [[ "$URL" =~ ^git: ]]; then
+        if ! test -d $BASENAME.git; then
+            git clone --mirror $URL --single-branch --branch $BRANCH
+            CHANGED="$CHANGED $MODULE"
+            cd $BASENAME.git
+            REV=$(git rev-parse $BRANCH)
+            cd ..
+        else
+            cd $BASENAME.git
+            OLD_REV=""
+            git rev-parse -q --verify refs/heads/$BRANCH && OLD_REV=`git rev-parse $BRANCH`
+            git fetch origin $BRANCH
+            REV=$(git rev-parse $BRANCH)
+            if [ "x$OLD_REV" != "x$REV" ]; then
+                CHANGED="$CHANGED $MODULE"
+            fi
+            cd ..
+        fi
+        BODY="$BODY$MODULE: $URL $REV"$'\n'
+    elif [[ "$URL" =~ ^lp: ]]; then
+        REPONAME=`echo $URL | sed s/.*://`
+        if ! test -d $REPONAME.bzr; then
+            bzr branch  $URL $REPONAME.bzr
+            CHANGED="$CHANGED $MODULE"
+            cd $REPONAME.bzr
+            REV=$(bzr revno)
+            cd ..
+        else
+            cd $REPONAME.bzr
+            OLD_REV=$(bzr revno)
+            bzr pull
+            REV=$(bzr revno)
+            if [ "x$OLD_REV" != "x$REV" ]; then
+                CHANGED="$CHANGED $MODULE"
+            fi
+            cd ..
+        fi
+        BODY="$BODY$MODULE: $URL $REV"$'\n'
+    elif [[ "$URL" =~ ^\. ]]; then
+        if test -f $BASENAME; then
+            cmp -s "$URL" "$BASENAME"
+            if [[ $? != 0 ]]; then
+                cp "$URL" "$BASENAME"
+                CHANGED="$CHANGED $MODULE"
+            fi
+        else
+            cp "$URL" "$BASENAME"
+            CHANGED="$CHANGED $MODULE"
+        fi
+        BODY="$BODY$MODULE: $URL"$'\n'
+    else
+        if ! test -f $BASENAME ; then
+            curl -L -O $URL
+            CHANGED="$CHANGED $MODULE"
+        fi
+        BODY="$BODY$MODULE: $URL"$'\n'
+    fi
+
+    # If anything changed in this module or before, blow away any caches
+    if [ "x$CHANGED" != "x" ]; then
+        rm -rf ../cache/cache-$APPID-$MODULE.tar
+    elif test -f "../cache/cache-$APPID-$MODULE.tar"; then
+        # No changes last and there is a cache for this module, start here
+        echo Found cache $MODULE
+        STARTAT=$MODULE
+    fi
+done
+
+cd ..
+
+if [ "x$CHANGED" == "x" -a "x${FORCE-}" == "x" ]; then
+    echo "No changes - skipping rebuild"
+    exit 0
+fi
+
+echo "Changed modules: $CHANGED"
+
+rm -rf app
+xdg-app build-init app $APPID $SDK $PLATFORM $SDK_VERSION
+
+mkdir -p build
+
+cd build
+for MODULE in $MODULES; do
+    if [ "x${STARTAT}" != "x" ]; then
+        if [ "x${STARTAT}" == "x${MODULE}" ]; then
+            echo ========== Using cache from $MODULE ================
+            tar xf ../cache/cache-$APPID-$MODULE.tar -C ../app
+            STARTAT=""
+        else
+            echo ========== Ignoring $MODULE ================
+        fi;
+        continue;
+    fi
+
+    echo ========== Building $MODULE ================
+
+    OPT="${OPTS[$MODULE]-}"
+    URL=${SOURCES[$MODULE]}
+    BASENAME=`basename $URL`
+    if [[ "$URL" =~ ^git: ]]; then
+        DIR=$BASENAME
+        rm -rf $DIR
+        BRANCH=${BRANCHES[$MODULE]-master}
+        git clone --shared --branch $BRANCH ../dl/$BASENAME.git
+    elif [[ "$URL" =~ ^lp: ]]; then
+        REPONAME=`echo $URL | sed s/.*://`
+        DIR=$REPONAME
+        rm -rf $REPONAME
+        bzr branch --stacked ../dl/$REPONAME.bzr $REPONAME
+    elif [[ "$URL" =~ .zip$ ]]; then
+        DIR=${BASENAME%.zip}
+        rm -rf $DIR
+        unzip ../dl/$BASENAME
+
+        OPT="$OPT noautogen"
+    else
+        DIR=${BASENAME%.t*}
+        rm -rf $DIR
+        tar xf ../dl/$BASENAME
+
+        OPT="$OPT noautogen"
+    fi
+
+    CONFIGURE_ARGS="${CONFIGURE[$MODULE]-}"
+    PREPARE="${CUSTOM_PREPARE[$MODULE]-}"
+
+    cd "$DIR"
+    if [ "x$PREPARE" != "x" ] ; then
+        xdg-app build ../../app bash -c "$PREPARE"
+    fi
+    if ! contains "$OPT" nohelper ; then
+        xdg-app build ../../app ../../build_helper.sh "$OPT" "--prefix=/app $CONFIGURE_ARGS"
+    fi
+    cd ..
+
+    if contains "$CACHEPOINTS" "$MODULE" ; then
+        tar cf ../cache/cache-$APPID-$MODULE.tar -C ../app files
+    fi
+done
+cd ..
+
+echo ========== Postprocessing ================
+
+#xdg-app build app rm -rf /app/include
+#xdg-app build app rm -rf /app/lib/pkgconfig
+#xdg-app build app rm -rf /app/share/pkgconfig
+#xdg-app build app rm -rf /app/share/aclocal
+#xdg-app build app rm -rf /app/share/gtk-doc
+#xdg-app build app rm -rf /app/share/man
+#xdg-app build app rm -rf /app/share/info
+#xdg-app build app rm -rf /app/share/devhelp
+#xdg-app build app rm -rf /app/share/vala/vapi
+xdg-app build app bash -c "find /app/lib -name *.a | xargs -r rm"
+xdg-app build app bash -c "find /app -name *.la | xargs -r rm"
+xdg-app build app bash -c "find /app -name *.pyo | xargs -r rm"
+xdg-app build app bash -c "find /app -name *.pyc | xargs -r rm"
+xdg-app build app glib-compile-schemas /app/share/glib-2.0/schemas
+xdg-app build app gtk-update-icon-cache -f -t /app/share/icons/hicolor
+
+xdg-app build app bash -c "find /app -type f | xargs file | grep ELF | grep 'not stripped' | cut -d: -f1 | 
xargs -r -n 1 strip"
+if [ "x${DESKTOP_FILE-}" != x ]; then
+    xdg-app build app mv /app/share/applications/${DESKTOP_FILE} /app/share/applications/${APPID}.desktop
+fi
+if [ "x${DESKTOP_NAME_SUFFIX-}" != x ]; then
+    xdg-app build app sed -i "s/^Name\(\[.*\]\)\?=.*/&${DESKTOP_NAME_SUFFIX}/" 
/app/share/applications/${APPID}.desktop
+fi
+if [ "x${DESKTOP_NAME_PREFIX-}" != x ]; then
+    xdg-app build app sed -i "s/^Name\(\[.*\]\)\?=/&${DESKTOP_NAME_PREFIX}/" 
/app/share/applications/${APPID}.desktop
+fi
+if [ "x${ICON_FILE-}" != x ]; then
+    xdg-app build app bash -c "for i in \`find /app/share/icons -name ${ICON_FILE}\`; do mv \$i \`dirname 
\$i\`/${APPID}.png; done"
+    xdg-app build app sed -i "s/Icon=.*/Icon=${APPID}/" /app/share/applications/${APPID}.desktop
+fi
+if [ "x${CLEANUP_FILES-}" != x ]; then
+    xdg-app build app rm -rf ${CLEANUP_FILES-}
+fi
+
+xdg-app build-finish --command=$COMMAND --share=ipc --socket=x11 --socket=pulseaudio --socket=session-bus 
--filesystem=host --talk-name=ca.desrt.dconf ${FINISH_ARGS-} app
+xdg-app build-export --subject="Nightly build of ${APPID}, `date`" --body="$BODY" ${EXPORT_ARGS-} repo app
diff --git a/build/xdg-app/build_helper.sh b/build/xdg-app/build_helper.sh
new file mode 100755
index 0000000..addd82e
--- /dev/null
+++ b/build/xdg-app/build_helper.sh
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+set -o nounset
+set -o errexit
+
+if [ "$#" -nt 3 ]; then
+    echo "Wrong args"
+fi
+
+OPT="$1"
+CONFIGURE_ARGS="$2"
+
+contains() {
+  for word in $1; do
+    [[ "$word" = "$2" ]] && return 0
+  done
+  return 1
+}
+
+if contains "$OPT" stdcpp11; then
+    export CXXFLAGS="-O2 -std=c++11"
+fi
+
+if ! contains "$OPT" noautogen ; then
+    ./autogen.sh $CONFIGURE_ARGS
+fi
+if contains "$OPT" force; then
+    libtoolize --force
+    aclocal
+    autoheader
+    automake --force-missing --add-missing --foreign
+    autoconf
+fi
+if contains "$OPT" configure ||  contains "$OPT" noautogen; then
+    ./configure $CONFIGURE_ARGS
+fi
+make -j`nproc`
+make install
diff --git a/build/xdg-app/gnome-builder.def b/build/xdg-app/gnome-builder.def
new file mode 100644
index 0000000..6b432e2
--- /dev/null
+++ b/build/xdg-app/gnome-builder.def
@@ -0,0 +1,42 @@
+APPID=org.gnome.Builder
+SDK=org.gnome.Sdk
+PLATFORM=org.gnome.Sdk
+SDK_VERSION=3.18
+ICON_FILE=builder.png
+COMMAND=gnome-builder
+
+BRANCHES[libgit2]="v0.23.3"
+
+CACHEPOINTS="libpeas libgit2-glib gtksourceview devhelp"
+
+CLEANUP_FILES="/app/bin/pygobject-codegen-2.0 /app/bin/peas-demo /app/lib/peas-demo"
+
+CONFIGURE[libpeas]="--disable-documentation"
+
+CUSTOM_PREPARE[jedi]="PYTHONPATH=/app/lib/python3.3/site-packages python3 setup.py install --prefix=/app"
+CUSTOM_PREPARE[libgit2]="cmake -DCMAKE_INSTALL_PREFIX:PATH=/app . && make -j`nproc` && make install"
+CUSTOM_PREPARE[pip]="PYTHONPATH=/app/lib/python3.3/site-packages python3 setup.py install --prefix=/app"
+CUSTOM_PREPARE[setuptools]="mkdir -p /app/lib/python3.3/site-packages && 
PYTHONPATH=/app/lib/python3.3/site-packages python3 setup.py install --prefix=/app"
+
+FINISH_ARGS="--env=PYTHONPATH=/app/lib/python3.3/site-packages:"
+
+OPTS[jedi]=nohelper
+OPTS[libgit2]=nohelper
+OPTS[pip]=nohelper
+OPTS[py2cairo]=force
+OPTS[setuptools]=nohelper
+
+MODULES="setuptools pip jedi py2cairo pygobject libpeas libssh2 libgit2 libgit2-glib gtksourceview devhelp 
gnome-builder"
+
+SOURCES[devhelp]="http://ftp.acc.umu.se/pub/GNOME/sources/devhelp/3.18/devhelp-3.18.1.tar.xz";
+SOURCES[gnome-builder]="../../../gnome-builder-3.19.0.tar.xz"
+SOURCES[gtksourceview]="http://ftp.acc.umu.se/pub/GNOME/sources/gtksourceview/3.18/gtksourceview-3.18.1.tar.xz";
+SOURCES[jedi]="https://pypi.python.org/packages/source/j/jedi/jedi-0.9.0.tar.gz";
+SOURCES[libgit2-glib]="http://ftp.acc.umu.se/pub/GNOME/sources/libgit2-glib/0.23/libgit2-glib-0.23.6.tar.xz";
+SOURCES[libgit2]="git://github.com/libgit2/libgit2"
+SOURCES[libpeas]="http://ftp.gnome.org/pub/GNOME/sources/libpeas/1.16/libpeas-1.16.0.tar.xz";
+SOURCES[libssh2]="https://github.com/libssh2/libssh2/releases/download/libssh2-1.6.0/libssh2-1.6.0.tar.gz";
+SOURCES[pip]="https://pypi.python.org/packages/source/p/pip/pip-7.1.2.tar.gz";
+SOURCES[py2cairo]="http://cairographics.org/releases/py2cairo-1.10.0.tar.bz2";
+SOURCES[pygobject]="git://git.gnome.org/pygobject"
+SOURCES[setuptools]="https://pypi.python.org/packages/source/s/setuptools/setuptools-18.4.tar.gz";


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]