[gnome-builder] build: start on xdg-app definition
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] build: start on xdg-app definition
- Date: Tue, 27 Oct 2015 17:56:39 +0000 (UTC)
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]