unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* [PATCH] Add adb
@ 2016-12-11 16:26 Julien Lepiller
  2016-12-11 17:28 ` Marius Bakke
  0 siblings, 1 reply; 8+ messages in thread
From: Julien Lepiller @ 2016-12-11 16:26 UTC (permalink / raw)
  To: guix-devel

[-- Attachment #1: Type: text/plain, Size: 1065 bytes --]

Hi,

I wanted to use adb, so here is a patch to have it in the distro. It
works when ran as root, or if you add some udev rules to your os
configuration.

An issue I can see with this package is that it is only a part of the
upstream repository, which in turn is only a part of a bigger build
system. Normally, you would download multiple repos and build them all
together to get an android image, and some android tools (including
adb). I don't think we want to build a full android image, so I wrote a
recipe for adb only.

I took the recipe from archlinux, as well as the patch (android-tools
package:
https://git.archlinux.org/svntogit/community.git/tree/trunk?h=packages/android-tools,
see build.sh and fix-build.patch). They use clang, but our version isn't
able to build c++ source files (it cannot find includes such as
<string> or <iostream>), so I fixed the source to remove clang dialect
in adb/adb_client.h so we can build the files using gcc.

Archlinux also builds fastboot and mkbootimg. Should I build them along
with adb, or in a separate packages?

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-gnu-Add-adb.patch --]
[-- Type: text/x-patch, Size: 10655 bytes --]

From e1067facc404655c021011266c42d5e643a87abd Mon Sep 17 00:00:00 2001
From: Julien Lepiller <julien@lepiller.eu>
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 <julien@lepiller.eu>
+;;;
+;;; 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 <http://www.gnu.org/licenses/>.
+
+(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 <errno.h>
++#include <sys/syscall.h>
+ 
+ #include <string>
+ #include <vector>
+@@ -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 <errno.h>
++#include <string.h>
+ 
+ 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 <fcntl.h>
+ #include <sys/stat.h>
+ #include <sys/types.h>
++#include <string.h>
+ 
+ #include <string>
+ 
+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 <libgen.h>
++#include <string.h>
+ 
+ // For getprogname(3) or program_invocation_short_name.
+ #if defined(__ANDROID__) || defined(__APPLE__)
-- 
2.11.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] Add adb
  2016-12-11 16:26 [PATCH] Add adb Julien Lepiller
@ 2016-12-11 17:28 ` Marius Bakke
  2016-12-11 18:17   ` Julien Lepiller
  0 siblings, 1 reply; 8+ messages in thread
From: Marius Bakke @ 2016-12-11 17:28 UTC (permalink / raw)
  To: Julien Lepiller, guix-devel


[-- Attachment #1.1: Type: text/plain, Size: 1911 bytes --]

Julien Lepiller <julien@lepiller.eu> writes:

> Hi,
>
> I wanted to use adb, so here is a patch to have it in the distro. It
> works when ran as root, or if you add some udev rules to your os
> configuration.
>
> An issue I can see with this package is that it is only a part of the
> upstream repository, which in turn is only a part of a bigger build
> system. Normally, you would download multiple repos and build them all
> together to get an android image, and some android tools (including
> adb). I don't think we want to build a full android image, so I wrote a
> recipe for adb only.
>
> I took the recipe from archlinux, as well as the patch (android-tools
> package:
> https://git.archlinux.org/svntogit/community.git/tree/trunk?h=packages/android-tools,
> see build.sh and fix-build.patch). They use clang, but our version isn't
> able to build c++ source files (it cannot find includes such as
> <string> or <iostream>), so I fixed the source to remove clang dialect
> in adb/adb_client.h so we can build the files using gcc.
>
> Archlinux also builds fastboot and mkbootimg. Should I build them along
> with adb, or in a separate packages?

Wow, go build system and adb in a single weekend, is it Christmas
already :)

I happen to have a work-in-progress adb expression as well, but creating
liblog and libbase as standalone packages. Also creating Makefiles
(based on the Debian approach) instead of calling g++ directly.

Looking at the attached patch here, I think what's missing in my build
is the string.h inclusions. We should join efforts and get this in ASAP!

Attaching my patch here. I think having liblog and libbase as separate
expressions is cleaner, but creating Makefiles may be unnecessary. WDYT?

I also wonder if it's worth adding a snippet to each package source, so
that the source derivations only contain the files relevant to each
respective package for licensing reasons.


[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 487 bytes --]

[-- Attachment #2: 0001-gnu-Add-adb.patch --]
[-- Type: text/x-patch, Size: 15012 bytes --]

From 28bfa5086ac048c40bfb9a44436ca977fbe5b018 Mon Sep 17 00:00:00 2001
From: Marius Bakke <mbakke@fastmail.com>
Date: Thu, 17 Nov 2016 23:00:48 +0100
Subject: [PATCH] gnu: Add adb.

* gnu/packages/android.scm: New file.
* gnu/packages/patches/libbase-use-own-logging.patch: New file.
* gnu/local.mk: Add them.
---
 gnu/local.mk                                       |   1 +
 gnu/packages/android.scm                           | 238 +++++++++++++++++++++
 gnu/packages/patches/libbase-use-own-logging.patch |  77 +++++++
 3 files changed, 316 insertions(+)
 create mode 100644 gnu/packages/android.scm
 create mode 100644 gnu/packages/patches/libbase-use-own-logging.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 98a7f65ca..c632b0790 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -657,6 +657,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/libarchive-fix-symlink-check.patch	\
   %D%/packages/patches/libarchive-fix-filesystem-attacks.patch	\
   %D%/packages/patches/libarchive-safe_fprintf-buffer-overflow.patch	\
+  %D%/packages/patches/libbase-use-own-logging.patch		\
   %D%/packages/patches/libbonobo-activation-test-race.patch	\
   %D%/packages/patches/libcanberra-sound-theme-freedesktop.patch \
   %D%/packages/patches/libcmis-fix-test-onedrive.patch		\
diff --git a/gnu/packages/android.scm b/gnu/packages/android.scm
new file mode 100644
index 000000000..38495d77d
--- /dev/null
+++ b/gnu/packages/android.scm
@@ -0,0 +1,238 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012 Stefan Handschuh <handschuh.stefan@googlemail.com>
+;;; Copyright © 2015 Kai-Chung Yan <seamlikok@gmail.com>
+;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.com>
+;;;
+;;; 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 <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages android)
+  #:use-module (guix packages)
+  #:use-module (guix git-download)
+  #:use-module (guix build-system gnu)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages tls))
+
+;; The Makefiles that we add are largely based on the Debian
+;; packages.  They are licensed under GPL-2 and have copyright:
+;; 2012, Stefan Handschuh <handschuh.stefan@googlemail.com>
+;; 2015, Kai-Chung Yan <seamlikok@gmail.com>
+;; Big thanks to them for laying the groundwork.
+
+;; The version tag is consistent between all repositories.
+(define (android-platform-version) "7.1.1_r4")
+
+;; Note: Use git checkouts since the tarballs are generated on
+;; download with current timestamps causing the hash to change.
+(define (android-platform-build version)
+  (origin
+    (method git-fetch)
+    (uri (git-reference
+          (url "https://android.googlesource.com/platform/build")
+          (commit (string-append "android-" version))))
+    (file-name (string-append "android-platform-build-"
+                              version "-checkout"))
+    (sha256
+     (base32
+      "04dwq2abmw88frj6fmdcl7fc4v55fvcdg6y1yrrszkjwmdnrhhyx"))))
+
+(define (android-platform-system-core version)
+  (origin
+    (method git-fetch)
+    (uri (git-reference
+          (url "https://android.googlesource.com/platform/system/core")
+          (commit (string-append "android-" version))))
+    (file-name (string-append "android-platform-system-core-"
+                              version "-checkout"))
+    (sha256
+     (base32
+      "1xrms8nc575wdh9rjlnibjh501i0pj8vjcyaivj4zjqkhw18s4km"))))
+;; (define android-platform-system-core-license
+;;   (use-modules (guix licenses) #:prefix license)
+;;   (list (license:asl2.0    ; Main distribution.
+;;          license:bsd-2     ; fastboot, libcutils, libpixelflinger, toolbox/bsd-compatibility.h
+;;          license:bsd-4     ; Many files from libpixelflinger.
+;;          license:bsd-3     ; mincrypt, toolbox/*.c
+;;          license:gpl-2     ; Makefiles + some files that are dual ASL2.0/GPL-2
+;;          license:expat)))  ; libcutils/strlcpy.c
+
+(define liblog
+  (package
+    (name "liblog")
+    (version (android-platform-version))
+    (source (android-platform-system-core version))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; TODO.
+       #:make-flags '("CC=gcc")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'enter-source
+           (lambda _ (chdir "liblog") #t))
+         (add-after 'enter-source 'create-Makefile
+           (lambda _
+             ;; No useful makefile is shipped, so we create one.
+             (with-output-to-file "Makefile"
+               (lambda _
+                 (display
+                  (string-append
+                   "NAME = liblog\n"
+                   "SOURCES = log_event_list.c log_event_write.c"
+                   " logger_write.c config_write.c logger_name.c"
+                   " logger_lock.c fake_log_device.c fake_writer.c"
+                   " event_tag_map.c\n"
+
+                   "CFLAGS += -fvisibility=hidden -fPIC\n"
+                   "CPPFLAGS += -I../include -DFAKE_LOG_DEVICE=1"
+                   ;; Keep these two in sync with "liblog/Android.bp".
+                   " -DLIBLOG_LOG_TAG=1005"
+                   " -DSNET_EVENT_LOG_TAG=1397638484\n"
+                   "LDFLAGS += -shared -Wl,-soname,$(NAME).so.0 -lpthread\n"
+
+                   "build: $(SOURCES)\n"
+                   "	$(CC) $^ -o $(NAME).so.0 $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)\n"))))))
+         (delete 'configure)
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (lib (string-append out "/lib")))
+               (install-file "liblog.so.0" lib)
+               (with-directory-excursion lib
+                 (symlink "liblog.so.0" "liblog.so"))
+               #t))))))
+    (home-page "https://developer.android.com/")
+    (synopsis "Logging library from the Android platform.")
+    (description "@code{liblog} represents an interface to the volatile Android
+Logging system for NDK (Native) applications and libraries and contain
+interfaces for either writing or reading logs.  The log buffers are divided up
+in Main, System, Radio and Events sub-logs.")
+    (license license:asl2.0)))
+
+(define libbase
+  (package
+    (name "libbase")
+    (version (android-platform-version))
+    ;(source (android-platform-system-core version))
+    (source (origin
+              (inherit (android-platform-system-core version))
+              (patches
+               (search-patches "libbase-use-own-logging.patch"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; TODO.
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'enter-source
+           (lambda _ (chdir "base") #t))
+         (add-after 'enter-source 'create-Makefile
+           (lambda _
+             ;; No useful makefile is shipped, so we create one.
+             (with-output-to-file "Makefile"
+               (lambda _
+                 (display
+                  (string-append
+                   "NAME = libbase\n"
+                   "SOURCES = file.cpp logging.cpp parsenetaddress.cpp"
+                   " stringprintf.cpp strings.cpp errors_unix.cpp\n"
+
+                   "CXXFLAGS += -std=gnu++11\n"
+                   "CPPFLAGS += -Iinclude -I../include\n"
+                   "LDFLAGS += -shared -Wl,-soname,$(NAME).so.0"
+                   " -L.. -llog\n"
+
+                   "build: $(SOURCES)\n"
+                   "	$(CXX) $^ -o $(NAME).so.0 $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS)\n"
+                   ))))))
+         (delete 'configure)
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (lib (string-append out "/lib")))
+               (install-file "libbase.so.0" lib)
+               (with-directory-excursion lib
+                 (symlink "libbase.so.0" "libbase.so"))
+               (copy-recursively "include" out)
+               #t))))))
+    (inputs `(("liblog" ,liblog)))
+    (home-page "https://developer.android.com/")
+    (synopsis "Android platform base library")
+    (description "@code{libbase} is a library in common use by the
+various Android core host applications.")
+    (license license:asl2.0)))
+
+(define-public adb
+  (package
+    (name "adb")
+    (version (android-platform-version))
+    (source (android-platform-system-core version))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'enter-source
+           (lambda _ (chdir "adb") #t))
+         (add-after 'enter-source 'create-Makefile
+           (lambda _
+             ;; No useful makefile is shipped, so we create one.
+             (with-output-to-file "Makefile"
+               (lambda _
+                 (display
+                  (string-append
+                   ;; Common for all components.
+                   "CXXFLAGS += -std=gnu++14 -fpermissive\n"
+
+                   ;; Libabd specifics.
+                   "LIBABD_SOURCES = adb.cpp adb_auth.cpp adb_io.cpp "
+                   "adb_listeners.cpp adb_trace.cpp adb_utils.cpp fdevent.cpp "
+                   "sockets.cpp transport.cpp transport_local.cpp transport_usb.cpp "
+                   "fdevent.cpp get_my_path_linux.cpp sysdeps_unix.cpp "
+                   "usb_linux.cpp adb_auth_host.cpp diagnose_usb.cpp services.cpp\n"
+
+                   "LIBADB_CPPFLAGS += -I../include -I../base/include -DADB_HOST=1 "
+                   "-DADB_REVISION='\"" ,version "\"'\n"
+                   "LIBADB_LDFLAGS += -shared -Wl,-soname,libadb.so.0 "
+                   "-lcrypto -lpthread -L.. -lbase -lcutils\n"
+
+                   ;; Adb specifics.
+                   "ADB_SOURCES = adb_main.cpp console.cpp commandline.cpp "
+                   "adb_client.cpp file_sync_client.cpp\n"
+
+                   "libadb: $(LIBABD_SOURCES)\n"
+                   "	$(CXX) $^ -o libadb.so.0 $(CXXFLAGS) $(LIBADB_CPPFLAGS) "
+                   "$(LIBADB_LDFLAGS)\n"
+
+                   "build: libabd $(ADB_SOURCES)\n"
+                   "	$(CXX) $^ -o adb $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS)\n"
+                   ))))))
+         (delete 'configure)
+         (replace 'check
+           (lambda _
+             (zero? (system* "python" "test_adb.py"))))
+         )))
+    (inputs
+     `(("libbase" ,libbase)
+       ("openssl" ,openssl)))
+    (native-inputs
+     `(("python" ,python-wrapper)))
+    (home-page "https://developer.android.com/studio/command-line/adb.html")
+    (synopsis "Android Debug Bridge")
+    (description
+     "@command{adb} is a versatile command line tool that lets you communicate
+with an emulator instance or connected Android device.  It facilitates a variety
+of device actions, such as installing and debugging apps, and it provides access
+to a Unix shell that can run commands on the connected device or emulator.")
+    (license license:asl2.0)))
diff --git a/gnu/packages/patches/libbase-use-own-logging.patch b/gnu/packages/patches/libbase-use-own-logging.patch
new file mode 100644
index 000000000..4fcff832f
--- /dev/null
+++ b/gnu/packages/patches/libbase-use-own-logging.patch
@@ -0,0 +1,77 @@
+From e5dd71a290f664d3f3bf0dd8a4bad411dc7ad416 Mon Sep 17 00:00:00 2001
+From: Elliott Hughes <enh@google.com>
+Date: Thu, 28 Jul 2016 15:15:28 -0700
+Subject: [PATCH] libbase should use its own logging!
+
+Not doing so led to us using a bogus log tag.
+
+Bug: http://b/30281203
+Change-Id: I3ac91758a1a043146c65f2ae0f36fcfbe372c30f
+---
+ base/file.cpp    | 11 +++++------
+ base/logging.cpp |  3 +--
+ 2 files changed, 6 insertions(+), 8 deletions(-)
+
+diff --git a/base/file.cpp b/base/file.cpp
+index da1adba19..4e7ac82d1 100644
+--- a/base/file.cpp
++++ b/base/file.cpp
+@@ -24,9 +24,8 @@
+ #include <string>
+ 
+ #include "android-base/macros.h"  // For TEMP_FAILURE_RETRY on Darwin.
++#include "android-base/logging.h"
+ #include "android-base/utf8.h"
+-#define LOG_TAG "base.file"
+-#include "cutils/log.h"
+ #include "utils/Compat.h"
+ 
+ namespace android {
+@@ -86,22 +85,22 @@ bool WriteStringToFile(const std::string& content, const std::string& path,
+   int flags = O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC | O_NOFOLLOW | O_BINARY;
+   int fd = TEMP_FAILURE_RETRY(open(path.c_str(), flags, mode));
+   if (fd == -1) {
+-    ALOGE("android::WriteStringToFile open failed: %s", strerror(errno));
++    PLOG(ERROR) << "android::WriteStringToFile open failed";
+     return false;
+   }
+ 
+   // We do an explicit fchmod here because we assume that the caller really
+   // meant what they said and doesn't want the umask-influenced mode.
+   if (fchmod(fd, mode) == -1) {
+-    ALOGE("android::WriteStringToFile fchmod failed: %s", strerror(errno));
++    PLOG(ERROR) << "android::WriteStringToFile fchmod failed";
+     return CleanUpAfterFailedWrite(path);
+   }
+   if (fchown(fd, owner, group) == -1) {
+-    ALOGE("android::WriteStringToFile fchown failed: %s", strerror(errno));
++    PLOG(ERROR) << "android::WriteStringToFile fchown failed";
+     return CleanUpAfterFailedWrite(path);
+   }
+   if (!WriteStringToFd(content, fd)) {
+-    ALOGE("android::WriteStringToFile write failed: %s", strerror(errno));
++    PLOG(ERROR) << "android::WriteStringToFile write failed";
+     return CleanUpAfterFailedWrite(path);
+   }
+   close(fd);
+diff --git a/base/logging.cpp b/base/logging.cpp
+index 769c266c9..959bb8b05 100644
+--- a/base/logging.cpp
++++ b/base/logging.cpp
+@@ -43,12 +43,11 @@
+ 
+ #include "android-base/macros.h"
+ #include "android-base/strings.h"
+-#include "cutils/threads.h"
+ 
+ // Headers for LogMessage::LogLine.
+ #ifdef __ANDROID__
+ #include <android/set_abort_message.h>
+-#include "cutils/log.h"
++#include "log/log.h"
+ #else
+ #include <sys/types.h>
+ #include <unistd.h>
+-- 
+2.11.0
+
-- 
2.11.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] Add adb
  2016-12-11 17:28 ` Marius Bakke
@ 2016-12-11 18:17   ` Julien Lepiller
  2016-12-11 18:51     ` Marius Bakke
  0 siblings, 1 reply; 8+ messages in thread
From: Julien Lepiller @ 2016-12-11 18:17 UTC (permalink / raw)
  To: guix-devel

On Sun, 11 Dec 2016 18:28:56 +0100
Marius Bakke <mbakke@fastmail.com> wrote:

> Julien Lepiller <julien@lepiller.eu> writes:
> 
> > Hi,
> >
> > I wanted to use adb, so here is a patch to have it in the distro. It
> > works when ran as root, or if you add some udev rules to your os
> > configuration.
> >
> > An issue I can see with this package is that it is only a part of
> > the upstream repository, which in turn is only a part of a bigger
> > build system. Normally, you would download multiple repos and build
> > them all together to get an android image, and some android tools
> > (including adb). I don't think we want to build a full android
> > image, so I wrote a recipe for adb only.
> >
> > I took the recipe from archlinux, as well as the patch
> > (android-tools package:
> > https://git.archlinux.org/svntogit/community.git/tree/trunk?h=packages/android-tools,
> > see build.sh and fix-build.patch). They use clang, but our version
> > isn't able to build c++ source files (it cannot find includes such
> > as <string> or <iostream>), so I fixed the source to remove clang
> > dialect in adb/adb_client.h so we can build the files using gcc.
> >
> > Archlinux also builds fastboot and mkbootimg. Should I build them
> > along with adb, or in a separate packages?
> 
> Wow, go build system and adb in a single weekend, is it Christmas
> already :)
> 
> I happen to have a work-in-progress adb expression as well, but
> creating liblog and libbase as standalone packages. Also creating
> Makefiles (based on the Debian approach) instead of calling g++
> directly.
> 
> Looking at the attached patch here, I think what's missing in my build
> is the string.h inclusions. We should join efforts and get this in
> ASAP!
> 
> Attaching my patch here. I think having liblog and libbase as separate
> expressions is cleaner, but creating Makefiles may be unnecessary.
> WDYT?
> 
> I also wonder if it's worth adding a snippet to each package source,
> so that the source derivations only contain the files relevant to each
> respective package for licensing reasons.
> 

You're right, we should probably have separate libbase and liblog
packages, so we should work from your patch. Using a Makefile is also
probably cleaner than calling system*.

android-platform-build appears to be unused. I think
android-platform-system-core should not depend on version, because it
contains a sha256 value that already restricts it to a specific version.

Maybe the makefiles could be improved to allow parallel build. Although
the source is not so big that it actually matters.

I don't understand the purpose of libbase-use-own-logging.patch.

Shouldn't liblog be a propagated input of libbase?

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] Add adb
  2016-12-11 18:17   ` Julien Lepiller
@ 2016-12-11 18:51     ` Marius Bakke
  2017-01-29 15:51       ` Julien Lepiller
  0 siblings, 1 reply; 8+ messages in thread
From: Marius Bakke @ 2016-12-11 18:51 UTC (permalink / raw)
  To: Julien Lepiller, guix-devel

[-- Attachment #1: Type: text/plain, Size: 3367 bytes --]

Julien Lepiller <julien@lepiller.eu> writes:

> On Sun, 11 Dec 2016 18:28:56 +0100
> Marius Bakke <mbakke@fastmail.com> wrote:
>
>> Julien Lepiller <julien@lepiller.eu> writes:
>> 
>> > Hi,
>> >
>> > I wanted to use adb, so here is a patch to have it in the distro. It
>> > works when ran as root, or if you add some udev rules to your os
>> > configuration.
>> >
>> > An issue I can see with this package is that it is only a part of
>> > the upstream repository, which in turn is only a part of a bigger
>> > build system. Normally, you would download multiple repos and build
>> > them all together to get an android image, and some android tools
>> > (including adb). I don't think we want to build a full android
>> > image, so I wrote a recipe for adb only.
>> >
>> > I took the recipe from archlinux, as well as the patch
>> > (android-tools package:
>> > https://git.archlinux.org/svntogit/community.git/tree/trunk?h=packages/android-tools,
>> > see build.sh and fix-build.patch). They use clang, but our version
>> > isn't able to build c++ source files (it cannot find includes such
>> > as <string> or <iostream>), so I fixed the source to remove clang
>> > dialect in adb/adb_client.h so we can build the files using gcc.
>> >
>> > Archlinux also builds fastboot and mkbootimg. Should I build them
>> > along with adb, or in a separate packages?
>> 
>> Wow, go build system and adb in a single weekend, is it Christmas
>> already :)
>> 
>> I happen to have a work-in-progress adb expression as well, but
>> creating liblog and libbase as standalone packages. Also creating
>> Makefiles (based on the Debian approach) instead of calling g++
>> directly.
>> 
>> Looking at the attached patch here, I think what's missing in my build
>> is the string.h inclusions. We should join efforts and get this in
>> ASAP!
>> 
>> Attaching my patch here. I think having liblog and libbase as separate
>> expressions is cleaner, but creating Makefiles may be unnecessary.
>> WDYT?
>> 
>> I also wonder if it's worth adding a snippet to each package source,
>> so that the source derivations only contain the files relevant to each
>> respective package for licensing reasons.
>> 
>
> You're right, we should probably have separate libbase and liblog
> packages, so we should work from your patch. Using a Makefile is also
> probably cleaner than calling system*.
>
> android-platform-build appears to be unused. I think
> android-platform-system-core should not depend on version, because it
> contains a sha256 value that already restricts it to a specific version.

Yes, android-platform-build is an artifact from an early revision.
Taking a version argument is done mainly in order to be able to use the
'android-platform-version' variable everywhere, instead of updating it
multiple places.

> Maybe the makefiles could be improved to allow parallel build. Although
> the source is not so big that it actually matters.
>
> I don't understand the purpose of libbase-use-own-logging.patch.
>
> Shouldn't liblog be a propagated input of libbase?

The patch was lifted from the master branch which likely won't be
included in a tag before Android 8. It fixes references to the logging
library, which indeed should probably be propagated.

I will try incorporating the Arch patch later today.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 487 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] Add adb
  2016-12-11 18:51     ` Marius Bakke
@ 2017-01-29 15:51       ` Julien Lepiller
  2017-01-30 14:47         ` Ludovic Courtès
  0 siblings, 1 reply; 8+ messages in thread
From: Julien Lepiller @ 2017-01-29 15:51 UTC (permalink / raw)
  To: guix-devel

Hi,

are you still working on this?

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] Add adb
  2017-01-29 15:51       ` Julien Lepiller
@ 2017-01-30 14:47         ` Ludovic Courtès
  2017-01-30 15:44           ` Marius Bakke
  0 siblings, 1 reply; 8+ messages in thread
From: Ludovic Courtès @ 2017-01-30 14:47 UTC (permalink / raw)
  To: Julien Lepiller, Marius Bakke; +Cc: guix-devel

Julien Lepiller <julien@lepiller.eu> skribis:

> are you still working on this?

I think this was a question for Marius.  :-)

Ludo’.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] Add adb
  2017-01-30 14:47         ` Ludovic Courtès
@ 2017-01-30 15:44           ` Marius Bakke
  2017-01-30 17:27             ` julien lepiller
  0 siblings, 1 reply; 8+ messages in thread
From: Marius Bakke @ 2017-01-30 15:44 UTC (permalink / raw)
  To: Ludovic Courtès, Julien Lepiller; +Cc: guix-devel

[-- Attachment #1: Type: text/plain, Size: 421 bytes --]

Ludovic Courtès <ludo@gnu.org> writes:

> Julien Lepiller <julien@lepiller.eu> skribis:
>
>> are you still working on this?
>
> I think this was a question for Marius.  :-)

Hello! Unfortunately the device I made this package for got a lethal
dose of dihydrogenoxide, so the branch got stale :-)

I do have another device now that will need some "debugging" however.
Have you made any further work on this?

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 487 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] Add adb
  2017-01-30 15:44           ` Marius Bakke
@ 2017-01-30 17:27             ` julien lepiller
  0 siblings, 0 replies; 8+ messages in thread
From: julien lepiller @ 2017-01-30 17:27 UTC (permalink / raw)
  To: guix-devel

Le 2017-01-30 16:44, Marius Bakke a écrit :
> Ludovic Courtès <ludo@gnu.org> writes:
> 
>> Julien Lepiller <julien@lepiller.eu> skribis:
>> 
>>> are you still working on this?
>> 
>> I think this was a question for Marius.  :-)
> 
> Hello! Unfortunately the device I made this package for got a lethal
> dose of dihydrogenoxide, so the branch got stale :-)
> 
> I do have another device now that will need some "debugging" however.
> Have you made any further work on this?

No, I didn't, I was working on ocaml packages, but I'd love to have adb 
soon :)

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2017-01-30 17:28 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-12-11 16:26 [PATCH] Add adb Julien Lepiller
2016-12-11 17:28 ` Marius Bakke
2016-12-11 18:17   ` Julien Lepiller
2016-12-11 18:51     ` Marius Bakke
2017-01-29 15:51       ` Julien Lepiller
2017-01-30 14:47         ` Ludovic Courtès
2017-01-30 15:44           ` Marius Bakke
2017-01-30 17:27             ` julien lepiller

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).