;;; 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