webrtc_m130/webrtc/build/generate_srcjar.py
mbonadei 438062bd43 Reland of Fixing package-boundary violation with srjar_deps (patchset #1 id:1 of https://codereview.webrtc.org/2617533005/ )
Reason for revert:
Skipping the build of the target "//webrtc/modules/audio_device:audio_device_java" when building webrtc with chromium.

This was causing a failure because in that case it is not possible to refer to the script used by the template "android_shared_srcjar" with an absolute path (which seems to be necessary since the script attribute of action is relative to the invocation target and not to the template declaration).

Original issue's description:
> Revert of Fixing package-boundary violation with srjar_deps (patchset #5 id:80001 of https://codereview.webrtc.org/2610823002/ )
>
> Reason for revert:
> This CL is breaking a chromium.webrtc.fyi: https://build.chromium.org/p/chromium.webrtc.fyi/builders/Android%20Builder/builds/226
>
> I am trying to reproduce the issue on my local machine and I will try to re-land the CL later.
>
> Original issue's description:
> > Fixing package-boundary violation with srjar_deps
> >
> > Without the usage of the srcjar_deps attribute we were not able to
> > include .java files from other packages without violating the package
> > boundary contraint.
> >
> > As an example, in this CL the target "libjingle_peerconnection_java" was
> > directly including .java files from another packages in its "java_files"
> > attribute.
> >
> > Using srcjar_deps we are able to declare the dependency of the target
> > avoiding to create hidden dependencies in the codebase.
> >
> > This is not fixing the webrtc:6356 bug directly but it is a first step to
> > include ThreadUtils classes in libjingle_peerconnection_client_java.jar
> > again.
> >
> > It seems also to be related to the chromium:648244 bug. This can be solved
> > if we can find a way to perform srcjar generation in the android_library
> > target without changing the semantic of the target.
> >
> > BUG=webrtc:6356
> >
> > Review-Url: https://codereview.webrtc.org/2610823002
> > Cr-Commit-Position: refs/heads/master@{#15914}
> > Committed: 10a76592a7
>
> TBR=kjellander@webrtc.org
> # Skipping CQ checks because original CL landed less than 1 days ago.
> NOPRESUBMIT=true
> NOTREECHECKS=true
> NOTRY=true
> BUG=webrtc:6356
>
> Review-Url: https://codereview.webrtc.org/2617533005
> Cr-Commit-Position: refs/heads/master@{#15915}
> Committed: eb731ed09e

TBR=kjellander@webrtc.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=webrtc:6356

Review-Url: https://codereview.webrtc.org/2612953004
Cr-Commit-Position: refs/heads/master@{#15958}
2017-01-09 10:37:21 +00:00

69 lines
2.0 KiB
Python
Executable File

#!/usr/bin/env python
#
# Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS. All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
# TODO(mbonadei): move this script into chromium (build/android/gyp)
# when approved
import optparse
import os
import re
import sys
import zipfile
sys.path.insert(0, os.path.abspath(os.path.join(os.pardir, os.pardir, 'build',
'android', 'gyp', 'util')))
import build_utils
def PackageToPath(src_file):
"""Returns the path of a .java file according to the package declaration.
Example:
src_file='/home/foo/bar/org/android/TestClass.java'
With the following package definition:
package org.android;
It will return 'org/android'.
Args:
A string with the path of the .java source file to analyze.
Returns:
A string with the translation of the package definition into a path.
"""
with open(src_file) as f:
file_src = f.read()
package = re.search('package (.*);', file_src).group(1)
zip_folder = package.replace('.', os.path.sep)
file_name = os.path.basename(src_file)
return os.path.join(zip_folder, file_name)
def DoMain(argv):
usage = 'usage: %prog [options] input_file(s)...'
parser = optparse.OptionParser(usage=usage)
parser.add_option('-s', '--srcjar',
help='The path where the .srcjar file will be generated')
options, args = parser.parse_args(argv)
if not args:
parser.error('Need to specify at least one input source file (.java)')
input_paths = args
with zipfile.ZipFile(options.srcjar, 'w', zipfile.ZIP_STORED) as srcjar:
for src_path in input_paths:
zip_path = PackageToPath(src_path)
build_utils.AddToZipHermetic(srcjar, zip_path, src_path)
if __name__ == '__main__':
DoMain(sys.argv[1:])