* [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).