From e1067facc404655c021011266c42d5e643a87abd Mon Sep 17 00:00:00 2001 From: Julien Lepiller Date: Sun, 11 Dec 2016 17:08:15 +0100 Subject: [PATCH] gnu: Add adb. * gnu/packages/android.scm: New file. * gnu/packages/patches/adb-fix-build.scm: New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add them --- gnu/local.mk | 2 + gnu/packages/android.scm | 132 +++++++++++++++++++++++++++++++ gnu/packages/patches/adb-fix-build.patch | 67 ++++++++++++++++ 3 files changed, 201 insertions(+) create mode 100644 gnu/packages/android.scm create mode 100644 gnu/packages/patches/adb-fix-build.patch diff --git a/gnu/local.mk b/gnu/local.mk index 98a7f65ca..2dcf7547b 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -40,6 +40,7 @@ GNU_SYSTEM_MODULES = \ %D%/packages/adns.scm \ %D%/packages/algebra.scm \ %D%/packages/aidc.scm \ + %D%/packages/android.scm \ %D%/packages/animation.scm \ %D%/packages/anthy.scm \ %D%/packages/apl.scm \ @@ -463,6 +464,7 @@ dist_patch_DATA = \ %D%/packages/patches/abiword-explictly-cast-bools.patch \ %D%/packages/patches/abiword-wmf-version-lookup-fix.patch \ %D%/packages/patches/acl-hurd-path-max.patch \ + %D%/packages/patches/adb-fix-build.patch \ %D%/packages/patches/aegis-constness-error.patch \ %D%/packages/patches/aegis-perl-tempdir1.patch \ %D%/packages/patches/aegis-perl-tempdir2.patch \ diff --git a/gnu/packages/android.scm b/gnu/packages/android.scm new file mode 100644 index 000000000..f4aa02858 --- /dev/null +++ b/gnu/packages/android.scm @@ -0,0 +1,132 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2016 Julien Lepiller +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + +(define-module (gnu packages android) + #:use-module ((srfi srfi-1) #:hide (zip)) + #:use-module (gnu packages) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix git-download) + #:use-module (guix build-system gnu) + #:use-module (gnu packages tls) + #:use-module (gnu packages gcc) + #:use-module (gnu packages llvm)) + +(define-public adb + (package + (name "adb") + (version "7.0.0_r21") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://android.googlesource.com/platform/system/core") + (commit (string-append "android-" version)))) + (sha256 + (base32 + "0570iyxkknhfl6q4jif8569f6zxiqpg7vrgprk5jz2jjvz4wkd2h")) + (patches (search-patches "adb-fix-build.patch")))) + (build-system gnu-build-system) + (propagated-inputs `(("openssl" ,openssl))) + (arguments + `(#:parallel-build? #f + #:tests? #f + #:phases + (modify-phases %standard-phases + (delete 'configure) + (add-before 'build 'fix-clang + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "adb/adb_client.h" + (("_Nonnull") "") + (("_Nullable") "")))) + (replace 'build + (lambda* (#:key inputs #:allow-other-keys) + (define (compile-c file) + (format #t "CC ~a\n" file) + (zero? (system* "gcc" "-o" (string-append file ".o") + "-std=gnu11" "-DLIBLOG_LOG_TAG=1005" + "-DFAKE_LOG_DEVICE=1" "-D_GNU_SOURCE" + "-Ilog/include" "-Iinclude" "-c" + file))) + (define (compile-cpp file) + (format #t "CPP ~a\n" file) + (zero? (system* "g++" "-o" (string-append file ".o") + "-std=gnu++14" + (string-append "-DADB_REVISION=" "\"" + ,version "\"") + (string-append "-I" (assoc-ref inputs "gcc") + "/include/c++") + (string-append "-I" (assoc-ref inputs "gcc") + "/include/c++/backward") + (string-append "-I" (assoc-ref inputs "gcc") + "/include/c++/x86_64-unknown-linux-gnu") + "-DWORKAROUND_BUG6558362" "-D_GNU_SOURCE" + "-DADB_HOST=1" "-fpermissive" + "-Iinclude" "-Ibase/include" + "-Iadb" "-c" file))) + (define cpp-source + (list "adb/adb.cpp" "adb/adb_auth.cpp" + "adb/adb_io.cpp" "adb/adb_listeners.cpp" + "adb/adb_trace.cpp" "adb/adb_utils.cpp" + "adb/line_printer.cpp" "adb/sockets.cpp" + "adb/transport.cpp" "adb/transport_local.cpp" + "adb/transport_usb.cpp" "adb/sysdeps_unix.cpp" + "adb/fdevent.cpp" "adb/get_my_path_linux.cpp" + "adb/usb_linux.cpp" "adb/adb_auth_host.cpp" + "adb/shell_service_protocol.cpp" + "adb/console.cpp" "adb/commandline.cpp" + "adb/adb_client.cpp" "adb/services.cpp" + "adb/file_sync_client.cpp" "adb/client/main.cpp" + "base/file.cpp" "base/logging.cpp" + "base/parsenetaddress.cpp" "base/stringprintf.cpp" + "base/strings.cpp" "base/errors_unix.cpp" + "libcutils/sockets_unix.cpp" "libcutils/sockets.cpp" + "adb/diagnose_usb.cpp")) + (define c-source + (list "liblog/log_event_write.c" "liblog/fake_log_device.c" + "liblog/log_event_list.c" "liblog/logger_write.c" + "liblog/config_write.c" "liblog/logger_lock.c" + "liblog/fake_writer.c" "liblog/logger_name.c" + "libcutils/load_file.c" + "libcutils/socket_local_client_unix.c" + "libcutils/socket_loopback_client_unix.c" + "libcutils/socket_network_client_unix.c" + "libcutils/socket_loopback_server_unix.c" + "libcutils/socket_local_server_unix.c" + "libcutils/socket_inaddr_any_server_unix.c")) + (define (file-o list) + (string-join (map (lambda (str) (string-append str ".o")) + list))) + (map compile-c c-source) + (map compile-cpp cpp-source) + (zero? + (system + (string-append "g++ -o myadb -lrt -ldl -lpthread -lcrypto " + (file-o c-source) " " (file-o cpp-source)))))) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let ((bin (string-append (assoc-ref outputs "out") "/bin"))) + (mkdir-p bin) + (copy-file "myadb" (string-append bin "/adb")))))))) + (home-page + "https://android.googlesource.com/platform/system/core/") + (synopsis "Android Debug Bridge") + (description "Allows you to communicate with your android device through the +Android Debug Bridge.") + (license license:asl2.0))) ; and others for some files + diff --git a/gnu/packages/patches/adb-fix-build.patch b/gnu/packages/patches/adb-fix-build.patch new file mode 100644 index 000000000..fc81d6849 --- /dev/null +++ b/gnu/packages/patches/adb-fix-build.patch @@ -0,0 +1,67 @@ +This patch fixes the build of adb on linux. It was taken from archlinux. +diff --git a/adb/sysdeps.h b/adb/sysdeps.h +index 75dcc86..867f3ec 100644 +--- a/adb/sysdeps.h ++++ b/adb/sysdeps.h +@@ -25,6 +25,7 @@ + #endif + + #include ++#include + + #include + #include +@@ -831,7 +832,16 @@ static __inline__ int adb_is_absolute_host_path(const char* path) { + + static __inline__ unsigned long adb_thread_id() + { +- return (unsigned long)gettid(); ++ // TODO: this function should be merged with GetThreadId ++#if defined(__BIONIC__) ++ return gettid(); ++#elif defined(__APPLE__) ++ return syscall(SYS_thread_selfid); ++#elif defined(__linux__) ++ return syscall(__NR_gettid); ++#elif defined(_WIN32) ++ return GetCurrentThreadId(); ++#endif + } + + #endif /* !_WIN32 */ +diff --git a/base/errors_unix.cpp b/base/errors_unix.cpp +index 296995e..48269b6 100644 +--- a/base/errors_unix.cpp ++++ b/base/errors_unix.cpp +@@ -17,6 +17,7 @@ + #include "android-base/errors.h" + + #include ++#include + + namespace android { + namespace base { +diff --git a/base/file.cpp b/base/file.cpp +index da1adba..91a3901 100644 +--- a/base/file.cpp ++++ b/base/file.cpp +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + + #include + +diff --git a/base/logging.cpp b/base/logging.cpp +index 1741871..e97c7f1 100644 +--- a/base/logging.cpp ++++ b/base/logging.cpp +@@ -21,6 +21,7 @@ + #include "android-base/logging.h" + + #include ++#include + + // For getprogname(3) or program_invocation_short_name. + #if defined(__ANDROID__) || defined(__APPLE__) -- 2.11.0