8000 refactor: do not use electron.gyp to verify ffmpeg by alexeykuzmin · Pull Request #14405 · electron/electron · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

refactor: do not use electron.gyp to verify ffmpeg #14405

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Sep 4, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ gn-build-steps: &gn-build-steps
name: Verify ffmpeg
command: |
if [ "$RUN_TESTS" != "false" ] && [ "$BUILD_FFMPEG" == "true" ]; then
python src/electron/script/verify-ffmpeg.py -c Default --source-root "$PWD/src" --ffmpeg-path "$PWD/src/out/ffmpeg"
python src/electron/script/verify-ffmpeg.py --build-dir out/Default --source-root "$PWD/src" --ffmpeg-path out/ffmpeg
fi
- run:
name: Test
Expand Down
6 changes: 3 additions & 3 deletions appveyor-gn.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,13 @@ build_script:
- cd src
- gn gen out/Default "--args=import(\"//electron/build/args/%GN_CONFIG%.gn\") %GN_EXTRA_ARGS%"
- ninja -C out/Default electron:electron_app
- gn gen out/ffmpeg "--args=import(\"//electron/build/args/ffmpeg.gn\")"
- gn gen out/ffmpeg "--args=import(\"//electron/build/args/ffmpeg.gn\") %GN_EXTRA_ARGS%"
- ninja -C out/ffmpeg third_party/ffmpeg
- ninja -C out/Default electron:electron_dist_zip
test_script:
- if "%GN_CONFIG%"=="testing" ( echo Verifying non proprietary ffmpeg & python electron\script\verify-ffmpeg.py --build-dir out\Default --source-root %cd% --ffmpeg-path out\ffmpeg )
- ps: >-
if ($env:GN_CONFIG -eq 'testing') {
python electron\script\verify-ffmpeg.py -c Default --source-root "$PWD" --ffmpeg-path "$PWD\out\ffmpeg"
ninja -C out/Default third_party/electron_node:headers
$env:npm_config_nodedir="$pwd/out/Default/gen/node_headers"
$env:npm_config_msvs_version="2017"
Expand All @@ -43,7 +43,7 @@ test_script:
} else {
echo "Skipping tests for $env:GN_CONFIG build"
}
- if "%GN_CONFIG%"=="testing" ( echo "Running test suite" & .\out\Default\electron.exe electron\spec --ci )
- if "%GN_CONFIG%"=="testing" ( echo Running test suite & .\out\Default\electron.exe electron\spec --ci )
artifacts:
- path: src/out/Default/dist.zip
name: dist.zip
68 changes: 68 additions & 0 deletions script/lib/gn.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#!/usr/bin/env python

import subprocess
import sys

from util import scoped_cwd


class GNProject:
def __init__(self, out_dir):
self.out_dir = out_dir

def _get_executable_name(self):
if sys.platform == 'win32':
return 'gn.bat'

return 'gn'

def run(self, command_name, command_args):
with scoped_cwd(self.out_dir):
complete_args = [self._get_executable_name(), command_name, '.'] + command_args
return subprocess.check_output(complete_args)

def args(self):
return GNArgs(self)


class GNArgs:
def __init__(self, project):
self.project = project

def _get_raw_value(self, name):
# E.g. 'version = "1.0.0"\n'
raw_output = self.project.run('args',
['--list={}'.format(name), '--short'])

# E.g. 'version = "1.0.0"'
name_with_raw_value = raw_output[:-1]

# E.g. ['version', '"1.0.0"']
name_and_raw_value = name_with_raw_value.split(' = ')

raw_value = name_and_raw_value[1]
return raw_value

def get_string(self, name):
# Expects to get a string in double quotes, e.g. '"some_value"'.
raw_value = self._get_raw_value(name)

# E.g. 'some_value' (without enclosing quotes).
value = raw_value[1:-1]
return value

def get_boolean(self, name):
# Expects to get a 'true' or a 'false' string.
raw_value = self._get_raw_value(name)

if raw_value == 'true':
return True

if raw_value == 'false':
return False

return None


def gn(out_dir):
return GNProject(out_dir)
53 changes: 28 additions & 25 deletions script/verify-ffmpeg.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,40 +5,42 @@
import subprocess
import sys

from lib.util import electron_gyp, rm_rf
from lib.gn import gn
from lib.util import rm_rf


SOURCE_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
FFMPEG_LIBCC_PATH = os.path.join(SOURCE_ROOT, 'vendor', 'download',
'libchromiumcontent', 'ffmpeg')

PROJECT_NAME = electron_gyp()['project_name%']
PRODUCT_NAME = electron_gyp()['product_name%']


def main():
args = parse_args()
os.chdir(args.source_root)

app_path = create_app_copy(args)
initial_app_path = os.path.join(os.path.abspath(args.source_root), args.build_dir)
app_path = create_app_copy(initial_app_path)

# Those are the same in the original app and its copy.
# So it is ok to retrieve them from the original build dir and use in the copy.
product_name = gn(initial_app_path).args().get_string('electron_product_name')
project_name = gn(initial_app_path).args().get_string('electron_project_name')

if sys.platform == 'darwin':
electron = os.path.join(app_path, 'Contents', 'MacOS', PRODUCT_NAME)
electron = os.path.join(app_path, 'Contents', 'MacOS', product_name)
ffmpeg_name = 'libffmpeg.dylib'
ffmpeg_app_path = os.path.join(app_path, 'Contents', 'Frameworks',
'{0} Framework.framework'.format(PROJECT_NAME),
'{0} Framework.framework'.format(product_name),
'Libraries')
elif sys.platform == 'win32':
electron = os.path.join(app_path, '{0}.exe'.format(PROJECT_NAME))
electron = os.path.join(app_path, '{0}.exe'.format(project_name))
ffmpeg_app_path = app_path
ffmpeg_name = 'ffmpeg.dll'
else:
electron = os.path.join(app_path, PROJECT_NAME)
electron = os.path.join(app_path, project_name)
ffmpeg_app_path = app_path
ffmpeg_name = 'libffmpeg.so'

# Copy ffmpeg without proprietary codecs into app
shutil.copy(os.path.join(args.ffmpeg_path, ffmpeg_name), ffmpeg_app_path)
# Copy ffmpeg without proprietary codecs into app.
ffmpeg_lib_path = os.path.join(os.path.abspath(args.source_root), args.ffmpeg_path, ffmpeg_name)
shutil.copy(ffmpeg_lib_path, ffmpeg_app_path)

returncode = 0
try:
Expand All @@ -56,13 +58,13 @@ def main():


# Create copy of app to install ffmpeg library without proprietary codecs into
def create_app_copy(args):
initial_app_path = os.path.join(args.source_root, 'out', args.config)
app_path = os.path.join(args.source_root, 'out',
args.config + '-no-proprietary-codecs')
def create_app_copy(initial_app_path):
app_path = os.path.join(os.path.dirname(initial_app_path),
os.path.basename(initial_app_path) + '-no-proprietary-codecs')

if sys.platform == 'darwin':
app_name = '{0}.app'.format(PRODUCT_NAME)
product_name = gn(initial_app_path).args().get_string('electron_product_name')
app_name = '{0}.app'.format(product_name)
initial_app_path = os.path.join(initial_app_path, app_name)
app_path = os.path.join(app_path, app_name)

Expand All @@ -72,16 +74,17 @@ def create_app_copy(args):

def parse_args():
parser = argparse.ArgumentParser(description='Test non-proprietary ffmpeg')
parser.add_argument('-c', '--config',
help='Test with Release or Debug configuration',
default='D',
required=False)
parser.add_argument('-b', '--build-dir',
help='Path to an Electron build folder. Relative to the --source-root.',
default=None,
required=True)
parser.add_argument('--source-root',
default=SOURCE_ROOT,
required=False)
parser.add_argument('--ffmpeg-path',
default=FFMPEG_LIBCC_PATH,
required=False)
help='Path to a folder with a ffmpeg lib. Relative to the --source-root.',
default=None,
required=True)
return parser.parse_args()

if __name__ == '__main__':
Expand Down
0