diff --git a/click/apparmor.json b/click/apparmor.json new file mode 100644 index 000000000..a5963eab1 --- /dev/null +++ b/click/apparmor.json @@ -0,0 +1,5 @@ +{ + "policy_version": 1.3, + "template": "unconfined", + "policy_groups": [] +} diff --git a/click/manifest.json b/click/manifest.json new file mode 100644 index 000000000..3c6c66124 --- /dev/null +++ b/click/manifest.json @@ -0,0 +1,15 @@ +{ + "architecture": "armhf", + "description": "Ubuntu SDK IDE and DevKit", + "framework": "ubuntu-sdk-15.04", + "hooks": { + "sdk": { + "apparmor": "apparmor.json", + "desktop": "sdk.desktop" + } + }, + "maintainer": "Zoltán Balogh ", + "name": "com.ubuntu.sdk", + "title": "Ubuntu SDK IDE and DevKit", + "version": "27" +} diff --git a/click/sdk.desktop b/click/sdk.desktop new file mode 100644 index 000000000..8a12afd94 --- /dev/null +++ b/click/sdk.desktop @@ -0,0 +1,17 @@ +[Desktop Entry] +Name=Ubuntu SDK IDE and DevKit +Exec=ubuntu-sdk-ide-click %F +Terminal=false +Type=Application +X-Ubuntu-Touch=true +X-Ubuntu-Gettext-Domain=com.ubuntu.sdk +X-Ubuntu-XMir-Enable=true +# Added Icon and Path as a workaround for http://pad.lv/1227359. +# TODO remove them once that bug is fixed. --elopio - 2013-09-18 +Icon=ubuntu-sdk-ide.png +GenericName=Integrated Development Environment +MimeType=text/x-c++src;text/x-c++hdr;text/x-xsrc;application/x-designer;application/vnd.nokia.qt.qmakeprofile;application/vnd.nokia.xml.qt.resource;application/x-qmlproject; +Categories=Qt;Development;IDE; +InitialPreference=9 +Keywords=IDE;Ubuntu SDK IDE;buntu SDK;SDK;Ubuntu Touch;Qt Creator;Qt + diff --git a/click/ubuntu-sdk-ide-click b/click/ubuntu-sdk-ide-click new file mode 100755 index 000000000..887ee4908 --- /dev/null +++ b/click/ubuntu-sdk-ide-click @@ -0,0 +1,23 @@ +#!/bin/sh + +export PERL5LIB=//opt/click.ubuntu.com/com.ubuntu.sdk/current/usr/share/perl5/:/opt/click.ubuntu.com/com.ubuntu.sdk/23/usr/lib/arm-linux-gnueabihf/perl/5.20.2/ +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/click.ubuntu.com/com.ubuntu.sdk/current/usr/lib +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/click.ubuntu.com/com.ubuntu.sdk/current/usr/lib/arm-linux-gnueabihf +/opt/click.ubuntu.com/com.ubuntu.sdk/current/usr/bin/matchbox-window-manager -theme ../../..//opt/click.ubuntu.com/com.ubuntu.sdk/current/usr/share/themes/Default/ -use_titlebar no & + +#XKB config +#export XKB_CONFIG_ROOT=/usr/share/X11/xkb + +# Qt Platform to Mir +export QT_QPA_PLATFORM=xcb +#export QTCHOOSER_NO_GLOBAL_DIR=1 + + +export LD_LIBRARY_PATH=/opt/click.ubuntu.com/com.ubuntu.sdk/current/usr/lib/arm-linux-gnueabihf:/opt/click.ubuntu.com/com.ubuntu.sdk/current/usr/ubuntu-sdk-ide/lib/qtcreator/:/opt/click.ubuntu.com/com.ubuntu.sdk/current/usr/ubuntu-sdk-ide/qtcreator/lib:/opt/click.ubuntu.com/com.ubuntu.sdk/current/usr/lib:$LD_LIBRARY_PATH + +# Qt Modules +export QT_PLUGIN_PATH=/opt/click.ubuntu.com/com.ubuntu.sdk/current/usr/ubuntu-sdk-ide/bin/plugins/ +#export QML2_IMPORT_PATH=/opt/click.ubuntu.com/com.ubuntu.sdk/current/usr/ubuntu-sdk-dev/qml + +exec /opt/click.ubuntu.com/com.ubuntu.sdk/current/usr/ubuntu-sdk-ide/bin/qtcreator + diff --git a/click/ubuntu-sdk-ide.png b/click/ubuntu-sdk-ide.png new file mode 100644 index 000000000..1e993c67e Binary files /dev/null and b/click/ubuntu-sdk-ide.png differ diff --git a/create-ubuntu-sdk-ide-click.README b/create-ubuntu-sdk-ide-click.README new file mode 100644 index 000000000..773c24b84 --- /dev/null +++ b/create-ubuntu-sdk-ide-click.README @@ -0,0 +1,28 @@ +Modify /usr/bin/libertine-xmir with an export TMPDIR=/tmp" before the exec line. + +Change the GU in the /etc/ubuntu-touch-session.d/[DEVICE].conf to a smaller value. + +Testing from terminal the Xmir session can be started like this: + $ Xmir :1 -mirSocket $XDG_RUNTIME_DIR/mir_socket --desktop_file_hint=dialer-app + +the display need to be directed to the Xmir + $ export DISPLAY=:1 + +Set the Qt Platform + $ export QT_QPA_PLATFORM=xcb + +Hack around the library path + +# Qt Libs + $ export LD_LIBRARY_PATH=/usr/lib/arm-linux-gnueabihf/:/opt/click.ubuntu.com/com.ubuntu.sdk/current/usr/ubuntu-sdk-ide/qtcreator/lib:/opt/click.ubuntu.com/com.ubuntu.sdk/current/usr/lib:$LD_LIBRARY_PATH + $ export LD_LIBRARY_PATH=/opt/click.ubuntu.com/com.ubuntu.sdk/current/usr/ubuntu-sdk-dev/lib:$LD_LIBRARY_PATH + + + +Set Qt Modules + $ export QT_PLUGIN_PATH=/opt/click.ubuntu.com/com.ubuntu.sdk/current/usr/ubuntu-sdk-ide/bin/plugins/ + + +Execute /opt/click.ubuntu.com/com.ubuntu.sdk/current/usr/ubuntu-sdk-ide/bin/qtcreator + + diff --git a/create-ubuntu-sdk-ide-click.py b/create-ubuntu-sdk-ide-click.py new file mode 100755 index 000000000..0611194b1 --- /dev/null +++ b/create-ubuntu-sdk-ide-click.py @@ -0,0 +1,290 @@ +#!/usr/bin/python +from optparse import OptionParser +import re +import urlparse +from launchpadlib.launchpad import Launchpad +from subprocess import call +import subprocess +import sys +import os +import glob +import shutil +import requests + +ide_packages = [ + "ubuntu-sdk-ide", + "ubuntu-sdk-dev", + "ubuntu-clicksdk-qmake", + "apparmor", + "apparmor-easyprof", + "apparmor-easyprof-ubuntu", + "at", + "autoconf", + "automake", + "autotools-dev", + "base-files", + "binutils", + "bsdmainutils", + "build-essential", + "busybox-initramfs", + "bzip2", + "ca-certificates", + "click", + "click-apparmor", + "click-dev", + "click-reviewers-tools", + "cmake", + "cmake-data", + "cmake-extras", + "cpio", + "cpp", + "cpp-4.9", + "cron", + "dbus", + "dctrl-tools", + "debhelper", + "debootstrap", + "devscripts", + "dh-apparmor", + "dh-make", + "dh-python", + "diffstat", + "distro-info-data", + "dpkg-dev", + "libdpkg-perl", + "dput", + "fakeroot", + "file", + "g++", + "g++-4.9", + "gcc", + "gcc-4.9", + "gdb", + "gdb-multiarch", + "gdbserver", + "gettext", + "gettext-base", + "gir1.2-click-0.4", + "gir1.2-gee-0.8", + "gir1.2-glib-2.0", + "gir1.2-json-1.0", + "groff-base", + "hardening-includes", + "ifupdown", + "init-system-helpers", + "initramfs-tools", + "initramfs-tools-bin", + "intltool", + "intltool-debian", + "iproute2", + "isc-dhcp-client", + "isc-dhcp-common", + "iso-codes", + "klibc-utils", + "kmod", + "krb5-locales", + "libalgorithm-c3-perl", + "libalgorithm-diff-perl", + "libalgorithm-diff-xs-perl", + "libalgorithm-merge-perl", + "libapparmor-perl", + "libapt-pkg-perl", + "libarchive-extract-perl", + "libarchive-zip-perl", + "libarchive13", + "libasan1", + "libasn1-8-heimdal", + "libasprintf-dev", + "libasprintf0c2", + "libatm1", + "libatomic1", + "libauthen-sasl-perl", + "libbabeltrace-ctf1", + "libbabeltrace1", + "libboost-filesystem1.55.0", + "libboost-iostreams1.55.0", + "libboost-program-options1.55.0", + "libboost-system1.55.0", + "libbotan-1.10-0", + "libc-dev-bin", + "libc6-dbg", + "libc6-dev", + "libcap-ng0", + "libcgi-fast-perl", + "libcgi-pm-perl", + "libclass-accessor-perl", + "libclass-c3-perl", + "libclass-c3-xs-perl", + "libclick-0.4-0", + "libclone-perl", + "libcloog-isl4", + "libcommon-sense-perl", + "libcpan-meta-perl", + "libcroco3", + "libcurl3", + "libcurl3-gnutls", + "libdata-optlist-perl", + "libdata-section-perl", + "libdbus-1-3", + "libdbus-glib-1-2", + "libdigest-hmac-perl", + "libdistro-info-perl", + "libdns-export100", + "libdpkg-perl", + "libemail-valid-perl", + "libencode-locale-perl", + "liberror-perl", + "libmpfr4", + "libmpc3", + "perl", + "libisl13", + "make", + "matchbox-common", + "matchbox-window-manager", + "matchbox-desktop", + "matchbox-panel", + "matchbox-panel-manager", + "matchbox-keyboard", + "libfakekey0", + "libmatchbox1", + "libxsettings-client0", + "ttf-dejavu", + "matchbox-keyboard-im", + "libpango1.0-0", + "libpangox-1.0-0", + "libpangoxft-1.0-0", + "libstartup-notification0", + "libxft2", + "libpthread-stubs0-dev", + "libxau-dev", + "libxcb-xinerama0", + "libxcb1-dev", + "libxdmcp-dev", + "x11proto-core-dev", + "xorg-sgml-doctools", + "zlib1g", + "gcc-4.9-base", + "libstdc++-4.9-dev" + +] + + +def create_webroot_url_from_self_link(self_link): + scheme, netloc, _, _, _ = urlparse.urlsplit(self_link) + netloc = netloc.lstrip("api.") + return u"%s://%s/" % (scheme, netloc) + + +def get_deb(archive, package, series, arch): + re_version = re.compile(r"^\d+\:") + arch_series = series.getDistroArchSeries(archtag=arch) + x = archive.getPublishedBinaries(binary_name=package, + distro_arch_series=arch_series, + status="Published", pocket='Release', + exact_match=True) + + webroot = create_webroot_url_from_self_link(archive.self_link) + version = x[0].binary_package_version + version = re_version.sub("", version, 1) + if archive.owner.name == "ubuntu-archive": + yield "%subuntu/+archive/primary/+files/%s_%s_%s.deb" \ + % (webroot, x[0].binary_package_name, version, arch) + else: + yield "%s/~ubuntu-sdk-team/+archive/ubuntu/ppa/+files/%s_%s_%s.deb" \ + % (webroot, x[0].binary_package_name, version, arch) + + +def main(): + parser = OptionParser(usage="usage: %prog [options] source ...") + parser.add_option( + "-l", "--launchpad", dest="launchpad_instance", default="production") + parser.add_option( + "-a", "--arch", dest="arch", default="armhf", choices=['armhf', 'i386', 'amd64',], help="architecture of the package") + + options, args = parser.parse_args() + arch = options.arch + launchpad = Launchpad.login_anonymously('just testing', + options.launchpad_instance) + ubuntu = launchpad.distributions["ubuntu"] + distro_archive = ubuntu.main_archive + overlay_archive = launchpad.people["ubuntu-sdk-team"].\ + getPPAByName(name="ppa") + series = ubuntu.getSeries(name_or_version="vivid") + + arch_series = series.getDistroArchSeries(archtag=arch) + + build_directory = "./click-%s/" % arch + if not os.path.exists(build_directory): + os.makedirs(build_directory) + src="./click/" + src_files = os.listdir(src) + for file_name in src_files: + full_file_name = os.path.join(src, file_name) + if (os.path.isfile(full_file_name)): + shutil.copy(full_file_name, build_directory) + + for ide_package in ide_packages: + re_version = re.compile(r"^\d+\:") + archive = overlay_archive + x = overlay_archive.getPublishedBinaries( + binary_name=ide_package, + distro_arch_series=arch_series, + status="Published", pocket='Release', + exact_match=True) + + if len(x) == 0: + archive = distro_archive + x = distro_archive.getPublishedBinaries( + binary_name=ide_package, + distro_arch_series=arch_series, + status="Published", pocket='Release', + exact_match=True) + if len(x) == 0: + print("Could not find "+ide_package) + sys.exit(1) + else: + print(ide_package+" found in Archive") + else: + print(ide_package+" found in SDK PPA") + + x = x[0].binary_package_version + + generator = get_deb(archive, ide_package, series, arch) + for i in generator: + request = requests.get(i) + if request.status_code != 200: + i = re.sub('_%s.deb' % arch, '_all.deb', i) + + if ide_package != 'ubuntu-ui-toolkit': + binary_package_name = re.sub(r'-opensource-src', + r'', + ide_package.rstrip()) + else: + binary_package_name = re.sub(r'ubuntu-ui-toolkit', + r'ubuntu-sdk', + ide_package.rstrip()) + call(["wget", i, "-nv"]) + for deb_file in glob.glob('%s*deb' % ide_package): + call(["dpkg-deb", "-x", deb_file, build_directory]) + for junk_files in glob.glob("*.deb"): + os.remove(junk_files) +# click_package_rev = subprocess.Popen(["bzr", "revno"], stdout=subprocess.PIPE).communicate()[0] +# click_package_rev = click_package_rev.rstrip() +# manifest_file = open('click/manifest.json','r') +# manifest_with_orig_version = manifest_file.read() +# manifest_file.close() +# manifest_with_new_version = re.sub("\"version\":\s+\".*\"", "\"version\": \"%s\"" % click_package_rev, manifest_with_orig_version) +# manifest_file = open('click/manifest.json','w') +# manifest_file.write(manifest_with_new_version) +# manifest_file.close() + + + + call(["create_kit.sh","-a",arch]) + s=open("%s/manifest.json" % build_directory).read() + s=s.replace('armhf', '%s' % arch) + f=open("%s/manifest.json" % build_directory, 'w') + f.write(s) + f.close() + call(["click", "build", build_directory]) +main() diff --git a/create_kit.sh b/create_kit.sh new file mode 100755 index 000000000..13fb03268 --- /dev/null +++ b/create_kit.sh @@ -0,0 +1,76 @@ +#!/bin/bash + +ARCH="armhf" +while getopts "ha:" opt; do + case $opt in + a) + ARCH=$OPTARG + ;; + h) + echo "Usage: create_kit.sh -a [arch]" + echo -e "\t-a : Creat Kit for the given arch type. Default: ${ARCH} [armhf, i386, amd64]" + exit + ;; + :) + echo "Option -$OPTARG requires an argument." >&2 + exit 1 + ;; + esac +done + +QT_UID="UbuntuSDK-API-Qt" +SDK_TOOL="/usr/ubuntu-sdk-ide/bin/sdktool" +SDKPATH="./click-${ARCH}/usr/ubuntu-sdk-ide/share/qtcreator/QtProject/qtcreator" + + +rm ${SDKPATH}/*.xml + +case "${ARCH}" in + amd64) + GCC_UID="ProjectExplorer.ToolChain.Gcc:UbuntuSDKGCC-x86_64-linux-gnu" + NAME="GCC (x86 64bit in /opt/click.ubuntu.com/com.ubuntu.sdk/current/usr/bin/g++)" + ABI="x86-linux-generic-elf-64bit" + SUPPORTED_ABIS="x86-linux-generic-elf-64bit,x86-linux-generic-elf-32bit" + ;; + + i386) + GCC_UID="ProjectExplorer.ToolChain.Gcc:UbuntuSDKGCC-x86-linux-generic-elf-32bit" + NAME="GCC (x86 32bit in /opt/click.ubuntu.com/com.ubuntu.sdk/current/usr/bin/g++)" + ABI="x86-linux-generic-elf-32bit" + SUPPORTED_ABIS="x86-linux-generic-elf-32bit" + ;; + + armhf) + GCC_UID="ProjectExplorer.ToolChain.Gcc:UbuntuSDKGCC-arm-linux-generic-elf-32bit" + NAME="GCC (armhf in /opt/click.ubuntu.com/com.ubuntu.sdk/current/usr/bin/g++)" + ABI="arm-linux-generic-elf-32bit" + SUPPORTED_ABIS="arm-linux-generic-elf-32bit" + ;; + + *) + echo "Unknown architecture" + exit 1 + ;; +esac + +${SDK_TOOL} --sdkpath=${SDKPATH} addTC \ + --id "${GCC_UID}" \ + --name "${NAME}" \ + --path /opt/click.ubuntu.com/com.ubuntu.sdk/current/usr/bin/g++ \ + --abi "${ABI}" \ + --supportedAbis "${SUPPORTED_ABIS}" + +${SDK_TOOL} --sdkpath=${SDKPATH} addQt \ + --id "${QT_UID}" \ + --name "Ubuntu SDK Desktop Qt" \ + --qmake /opt/click.ubuntu.com/com.ubuntu.sdk/current/usr/bin/qmake-clicksdk \ + --type Qt4ProjectManager.QtVersion.Desktop + +${SDK_TOOL} --sdkpath=${SDKPATH} addKit \ + --id "UbuntuSDK-API-Desktop-Kit" \ + --name "Ubuntu SDK Desktop Kit" \ + --debuggerengine 1 \ + --debugger /opt/click.ubuntu.com/com.ubuntu.sdk/current/usr/bin/gdb \ + --devicetype Desktop \ + --toolchain "${GCC_UID}" \ + --qt "${QT_UID}" diff --git a/setup/gui/ubuntu-sdk-ide.desktop b/setup/gui/ubuntu-sdk-ide.desktop new file mode 100644 index 000000000..d84914b05 --- /dev/null +++ b/setup/gui/ubuntu-sdk-ide.desktop @@ -0,0 +1,13 @@ +[Desktop Entry] +Exec=ubuntu-sdk-ide %F +TryExec=ubuntu-sdk-ide +Icon=${SNAP}/meta/gui/ubuntu-sdk-ide.png +Type=Application +Terminal=false +Name=Ubuntu SDK IDE +GenericName=Integrated Development Environment +MimeType=text/x-c++src;text/x-c++hdr;text/x-xsrc;application/x-designer;application/vnd.nokia.qt.qmakeprofile;application/vnd.nokia.xml.qt.resource;application/x-qmlproject; +Categories=Qt;Development;IDE; +InitialPreference=9 +Keywords=IDE;Ubuntu SDK IDE;buntu SDK;SDK;Ubuntu Touch;Qt Creator;Qt + diff --git a/setup/gui/ubuntu-sdk-ide.png b/setup/gui/ubuntu-sdk-ide.png new file mode 100644 index 000000000..1e993c67e Binary files /dev/null and b/setup/gui/ubuntu-sdk-ide.png differ diff --git a/snapcraft.yaml b/snapcraft.yaml new file mode 100644 index 000000000..3794dd28a --- /dev/null +++ b/snapcraft.yaml @@ -0,0 +1,23 @@ +name: ubuntu-sdk-ide +version: "0" +summary: Integrated Development Environment for Ubuntu Touch +description: | + Qt Creator is a lightweight, cross-platform integrated development environment (IDE) designed to make + development with the Qt application framework even faster and easier. + + This package contains the Qt Creator and the Ubuntu plugins providing deeper integration for developing + applications for Ubuntu using the Ubuntu UI Toolkit. It also introduces an Ubuntu themed welcome screen. +confinement: devmode + +apps: + ubuntu-sdk-ide: + command: desktop-launch $SNAP/usr/ubuntu-sdk-ide/bin/qtcreator.sh -noload Ubuntu + plugs: [unity7, opengl, network-bind] + +parts: + ubuntu-sdk-ide: + plugin: nil + stage-packages: + - ubuntu-sdk-ide + # https://wiki.ubuntu.com/snapcraft/parts + after: [desktop-glib-only]