diff --git a/pkgs/development/mobile/titaniumenv/default.nix b/pkgs/development/mobile/titaniumenv/default.nix index 8117b452d70b..b7b5a048b978 100644 --- a/pkgs/development/mobile/titaniumenv/default.nix +++ b/pkgs/development/mobile/titaniumenv/default.nix @@ -1,11 +1,19 @@ -{pkgs, pkgs_i686}: +{pkgs, pkgs_i686, version ? "3.1"}: +let + titaniumexpr = if version == "2.1" then + ./titaniumsdk-2.1.nix + else if version == "3.1" then + ./titaniumsdk.nix + else + throw "Unknown Titanium SDK version: ${version}"; +in rec { androidenv = pkgs.androidenv; xcodeenv = if pkgs.stdenv.system == "x86_64-darwin" then pkgs.xcodeenv else null; - - titaniumsdk = import ./titaniumsdk.nix { + + titaniumsdk = import titaniumexpr { inherit (pkgs) stdenv fetchurl unzip makeWrapper python jdk; }; diff --git a/pkgs/development/mobile/titaniumenv/examples/default.nix b/pkgs/development/mobile/titaniumenv/examples/default.nix index f5fbf79e86d3..71ed7f618b53 100644 --- a/pkgs/development/mobile/titaniumenv/examples/default.nix +++ b/pkgs/development/mobile/titaniumenv/examples/default.nix @@ -1,19 +1,23 @@ { nixpkgs ? , system ? builtins.currentSystem +, version ? "3.1" }: let pkgs = import nixpkgs { inherit system; }; pkgs_darwin_x86_64 = import nixpkgs { system = "x86_64-darwin"; }; + versionString = pkgs.stdenv.lib.replaceChars [ "." ] [ "_" ] version; in rec { kitchensink_android = import ./kitchensink { - inherit (pkgs) fetchgit titaniumenv; + inherit (pkgs) fetchgit; + titaniumenv = builtins.getAttr "titaniumenv_${versionString}" pkgs; target = "android"; }; kitchensink_iphone = import ./kitchensink { - inherit (pkgs_darwin_x86_64) fetchgit titaniumenv; + inherit (pkgs_darwin_x86_64) fetchgit; + titaniumenv = builtins.getAttr "titaniumenv_${versionString}" pkgs_darwin_x86_64; target = "iphone"; }; diff --git a/pkgs/development/mobile/titaniumenv/fixso.sed b/pkgs/development/mobile/titaniumenv/fixso.sed new file mode 100644 index 000000000000..9a3bb0389a77 --- /dev/null +++ b/pkgs/development/mobile/titaniumenv/fixso.sed @@ -0,0 +1 @@ +s|apk_zip.write(os.path.join(lib_source_dir, fname), lib_dest_dir + fname)|info = zipfile.ZipInfo(lib_dest_dir + fname)\n\t\t\t\tinfo.compress_type = zipfile.ZIP_DEFLATED\n\t\t\t\tinfo.create_system = 3\n\t\t\t\tf = open(os.path.join(lib_source_dir, fname))\n\t\t\t\tapk_zip.writestr(info, f.read())\n\t\t\t\tf.close()| diff --git a/pkgs/development/mobile/titaniumenv/fixtiprofiler.sed b/pkgs/development/mobile/titaniumenv/fixtiprofiler.sed new file mode 100644 index 000000000000..e9a8f5b5baa7 --- /dev/null +++ b/pkgs/development/mobile/titaniumenv/fixtiprofiler.sed @@ -0,0 +1 @@ +s|apk_zip.write(os.path.join(lib_source_dir, 'libtiprofiler.so'), lib_dest_dir + 'libtiprofiler.so')|info = zipfile.ZipInfo(lib_dest_dir + 'libtiprofiler.so')\n\t\t\tinfo.compress_type = zipfile.ZIP_DEFLATED\n\t\t\tinfo.create_system = 3\n\t\t\tf = open(os.path.join(lib_source_dir, 'libtiprofiler.so'))\n\t\t\tapk_zip.writestr(info, f.read())\n\t\t\tf.close()\n| diff --git a/pkgs/development/mobile/titaniumenv/titaniumsdk-2.1.nix b/pkgs/development/mobile/titaniumenv/titaniumsdk-2.1.nix new file mode 100644 index 000000000000..2d1a4620eeba --- /dev/null +++ b/pkgs/development/mobile/titaniumenv/titaniumsdk-2.1.nix @@ -0,0 +1,62 @@ +{stdenv, src ? null, fetchurl, unzip, makeWrapper, python, jdk}: + +stdenv.mkDerivation { + name = "titanium-mobilesdk-2.1.4.v20121109124659"; + src = if src == null then + if (stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux") then fetchurl { + url = http://builds.appcelerator.com.s3.amazonaws.com/mobile/2_1_X/mobilesdk-2.1.4.v20121109124659-linux.zip; + sha1 = "381eb4b06b5a261ddf336c52d4714e5626142697"; + } + else if stdenv.system == "x86_64-darwin" then fetchurl { + url = http://builds.appcelerator.com.s3.amazonaws.com/mobile/2_1_X/mobilesdk-2.1.4.v20121109124659-osx.zip; + sha1 = "1cef5803f0c7b7bb35feb88d3f91bbb191e3953e"; + } + else throw "Platform: ${stdenv.system} not supported!" + else src; + + buildInputs = [ unzip makeWrapper ]; + + buildCommand = '' + mkdir -p $out + cd $out + yes y | unzip $src + + # Fix shebang header for python scripts + + find . -name \*.py | while read i + do + sed -i -e "s|#!/usr/bin/env python|#!${python}/bin/python|" $i + done + + # Zip files do not support timestamps lower than 1980. We have to apply a few work-arounds to cope with that + # Yes, I know it's nasty :-) + + cd mobilesdk/*/*/android + + sed -i -f ${./fixtiverify.sed} builder.py + sed -i -f ${./fixselfruntimev8.sed} builder.py + sed -i -f ${./fixnativelibs.sed} builder.py + + # Patch some executables + + ${if stdenv.system == "i686-linux" then + '' + patchelf --set-interpreter ${stdenv.gcc.libc}/lib/ld-linux.so.2 titanium_prep.linux32 + '' + else if stdenv.system == "x86_64-linux" then + '' + patchelf --set-interpreter ${stdenv.gcc.libc}/lib/ld-linux-x86-64.so.2 titanium_prep.linux64 + '' + else ""} + + # Wrap builder script + + wrapProgram `pwd`/builder.py \ + --prefix PYTHONPATH : ${python.modules.sqlite3}/lib/python*/site-packages \ + --prefix PATH : ${jdk}/bin \ + --prefix JAVA_HOME : ${jdk} + '' + stdenv.lib.optionalString (stdenv.system == "x86_64-darwin") '' + # 'ditto' utility is needed to copy stuff to the Xcode organizer. Dirty, but this allows it to work. + sed -i -e "s|ditto|/usr/bin/ditto|g" $out/mobilesdk/osx/*/iphone/builder.py + ''; +} diff --git a/pkgs/development/mobile/titaniumenv/titaniumsdk.nix b/pkgs/development/mobile/titaniumenv/titaniumsdk.nix index b4cd1a98fb06..51e07b4b5395 100644 --- a/pkgs/development/mobile/titaniumenv/titaniumsdk.nix +++ b/pkgs/development/mobile/titaniumenv/titaniumsdk.nix @@ -1,15 +1,15 @@ {stdenv, src ? null, fetchurl, unzip, makeWrapper, python, jdk}: stdenv.mkDerivation { - name = "titanium-mobilesdk-2.1.5.v20121112144658"; + name = "titanium-mobilesdk-3.1.0.v20130415184552"; src = if src == null then if (stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux") then fetchurl { - url = http://builds.appcelerator.com.s3.amazonaws.com/mobile/2_1_X/mobilesdk-2.1.5.v20121112144658-linux.zip; - sha1 = "79f073d11ee893c508c5aa675a3126501dd385fd"; + url = http://builds.appcelerator.com.s3.amazonaws.com/mobile/3_1_X/mobilesdk-3.1.0.v20130415184552-linux.zip; + sha1 = "7a8b34b92f6c3eff33eefb9a1b6b0d2e3670001d"; } else if stdenv.system == "x86_64-darwin" then fetchurl { - url = http://builds.appcelerator.com.s3.amazonaws.com/mobile/2_1_X/mobilesdk-2.1.5.v20121112144658-osx.zip; - sha1 = "6a9a726882222d1615de332aa1ca608c15564e1c"; + url = http://builds.appcelerator.com.s3.amazonaws.com/mobile/3_1_X/mobilesdk-3.1.0.v20130415184552-osx.zip; + sha1 = "e0ed7e399a104e0838e245550197bf787a66bf98"; } else throw "Platform: ${stdenv.system} not supported!" else src; @@ -34,8 +34,8 @@ stdenv.mkDerivation { cd mobilesdk/*/*/android sed -i -f ${./fixtiverify.sed} builder.py - sed -i -f ${./fixselfruntimev8.sed} builder.py - sed -i -f ${./fixnativelibs.sed} builder.py + sed -i -f ${./fixtiprofiler.sed} builder.py + sed -i -f ${./fixso.sed} builder.py # Patch some executables diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 1c524475fff9..f203ade609a4 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -433,11 +433,19 @@ let apg = callPackage ../tools/security/apg { }; xcodeenv = callPackage ../development/mobile/xcodeenv { }; - - titaniumenv = import ../development/mobile/titaniumenv { + + titaniumenv_2_1 = import ../development/mobile/titaniumenv { + inherit pkgs; + pkgs_i686 = pkgsi686Linux; + version = "2.1"; + }; + + titaniumenv_3_1 = import ../development/mobile/titaniumenv { inherit pkgs; pkgs_i686 = pkgsi686Linux; }; + + titaniumenv = titaniumenv_3_1; inherit (androidenv) androidsdk_4_1;