Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linphone-desktop
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
linphone-desktop
Commits
09a2996a
Commit
09a2996a
authored
May 27, 2016
by
Ghislain MARY
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Simplify prepare.py by using the reworked prepare.py from cmake-builder.
parent
2f08f4df
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
119 additions
and
183 deletions
+119
-183
prepare.py
prepare.py
+119
-183
No files found.
prepare.py
View file @
09a2996a
...
...
@@ -22,13 +22,11 @@
#
############################################################################
import
argparse
import
os
import
platform
import
sys
from
logging
import
error
,
warning
,
info
,
INFO
,
basicConfig
from
logging
import
error
,
warning
,
info
from
subprocess
import
Popen
from
distutils.spawn
import
find_executable
sys
.
dont_write_bytecode
=
True
sys
.
path
.
insert
(
0
,
'submodules/cmake-builder'
)
try
:
...
...
@@ -40,86 +38,142 @@ except Exception as e:
exit
(
1
)
class
DesktopTarget
(
prepare
.
Target
):
def
__init__
(
self
,
use_group
=
"NO"
):
prepare
.
Target
.
__init__
(
self
,
'
'
)
def
__init__
(
self
,
group_builders
=
False
):
super
(
DesktopTarget
,
self
)
.
__init__
(
'desktop
'
)
current_path
=
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
if
platform
.
system
()
==
'Windows'
:
current_path
=
current_path
.
replace
(
'
\\
'
,
'/'
)
self
.
config_file
=
'configs/config-desktop.cmake'
self
.
output
=
'OUTPUT/'
+
self
.
name
if
platform
.
system
()
==
'Windows'
:
self
.
generator
=
'Visual Studio 12 2013'
self
.
additional_args
=
[
'-DCMAKE_INSTALL_MESSAGE=LAZY'
,
'-DLINPHONE_BUILDER_EXTERNAL_SOURCE_PATH='
+
current_path
+
'/submodules'
,
'-DLINPHONE_BUILDER_GROUP_EXTERNAL_SOURCE_PATH_BUILDERS='
+
use_group
]
self
.
external_source_path
=
os
.
path
.
join
(
current_path
,
'submodules'
)
class
PythonTarget
(
prepare
.
Target
):
def
__init__
(
self
):
prepare
.
Target
.
__init__
(
self
,
'
'
)
super
(
PythonTarget
,
self
)
.
__init__
(
'python
'
)
current_path
=
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
if
platform
.
system
()
==
'Windows'
:
current_path
=
current_path
.
replace
(
'
\\
'
,
'/'
)
self
.
config_file
=
'configs/config-python.cmake'
self
.
output
=
'OUTPUT/'
+
self
.
name
if
platform
.
system
()
==
'Windows'
:
self
.
generator
=
'Visual Studio 9 2008'
self
.
additional_args
=
[
'-DCMAKE_INSTALL_MESSAGE=LAZY'
,
'-DLINPHONE_BUILDER_EXTERNAL_SOURCE_PATH='
+
current_path
+
'/submodules'
,
'-DLINPHONE_BUILDER_GROUP_EXTERNAL_SOURCE_PATH_BUILDERS=YES'
]
self
.
external_source_path
=
os
.
path
.
join
(
current_path
,
'submodules'
)
class
PythonRaspberryTarget
(
prepare
.
Target
):
def
__init__
(
self
):
prepare
.
Target
.
__init__
(
self
,
'
'
)
super
(
PythonRaspberryTarget
,
self
)
.
__init__
(
'python-raspberry
'
)
current_path
=
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
self
.
required_build_platforms
=
[
'Linux'
]
self
.
config_file
=
'configs/config-python-raspberry.cmake'
self
.
toolchain_file
=
'toolchains/toolchain-raspberry.cmake'
self
.
additional_args
=
[
'-DCMAKE_INSTALL_MESSAGE=LAZY'
,
'-DLINPHONE_BUILDER_EXTERNAL_SOURCE_PATH='
+
current_path
+
'/submodules'
,
'-DLINPHONE_BUILDER_GROUP_EXTERNAL_SOURCE_PATH_BUILDERS=YES'
]
def
check_is_installed
(
binary
,
prog
=
'it'
,
warn
=
True
):
if
not
find_executable
(
binary
):
if
warn
:
error
(
"Could not find {}. Please install {}."
.
format
(
binary
,
prog
))
return
False
return
True
def
check_tools
():
ret
=
0
# at least FFmpeg requires no whitespace in sources path...
if
" "
in
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
)):
error
(
"Invalid location: path should not contain any spaces."
)
ret
=
1
ret
|=
not
check_is_installed
(
'cmake'
)
self
.
output
=
'OUTPUT/'
+
self
.
name
self
.
external_source_path
=
os
.
path
.
join
(
current_path
,
'submodules'
)
desktop_targets
=
{
'desktop'
:
DesktopTarget
(),
'python'
:
PythonTarget
(),
'python-raspeberry'
:
PythonRaspberryTarget
()
}
class
DesktopPreparator
(
prepare
.
Preparator
):
def
__init__
(
self
,
targets
=
desktop_targets
,
default_targets
=
[
'desktop'
]):
super
(
DesktopPreparator
,
self
)
.
__init__
(
targets
,
default_targets
)
self
.
veryclean
=
True
self
.
argparser
.
add_argument
(
'-ac'
,
'--all-codecs'
,
help
=
"Enable all codecs, including the non-free ones"
,
action
=
'store_true'
)
self
.
argparser
.
add_argument
(
'-sys'
,
'--use-system-dependencies'
,
help
=
"Find dependencies on the system."
,
action
=
'store_true'
)
self
.
argparser
.
add_argument
(
'-p'
,
'--package'
,
help
=
"Build an installation package (only on Mac OSX and Windows)."
,
action
=
'store_true'
)
def
parse_args
(
self
):
super
(
DesktopPreparator
,
self
)
.
parse_args
()
if
self
.
args
.
use_system_dependencies
:
self
.
additional_args
+=
[
"-DLINPHONE_BUILDER_USE_SYSTEM_DEPENDENCIES=YES"
]
if
self
.
args
.
all_codecs
:
self
.
additional_args
+=
[
"-DENABLE_GPL_THIRD_PARTIES=YES"
]
self
.
additional_args
+=
[
"-DENABLE_NON_FREE_CODECS=YES"
]
self
.
additional_args
+=
[
"-DENABLE_AMRNB=YES"
]
self
.
additional_args
+=
[
"-DENABLE_AMRWB=YES"
]
self
.
additional_args
+=
[
"-DENABLE_G729=YES"
]
self
.
additional_args
+=
[
"-DENABLE_GSM=YES"
]
self
.
additional_args
+=
[
"-DENABLE_ILBC=YES"
]
self
.
additional_args
+=
[
"-DENABLE_ISAC=YES"
]
self
.
additional_args
+=
[
"-DENABLE_OPUS=YES"
]
self
.
additional_args
+=
[
"-DENABLE_SILK=YES"
]
self
.
additional_args
+=
[
"-DENABLE_SPEEX=YES"
]
self
.
additional_args
+=
[
"-DENABLE_FFMPEG=YES"
]
self
.
additional_args
+=
[
"-DENABLE_H263=YES"
]
self
.
additional_args
+=
[
"-DENABLE_H263P=YES"
]
self
.
additional_args
+=
[
"-DENABLE_MPEG4=YES"
]
self
.
additional_args
+=
[
"-DENABLE_OPENH264=YES"
]
self
.
additional_args
+=
[
"-DENABLE_VPX=YES"
]
self
.
additional_args
+=
[
"-DENABLE_X264=NO"
]
if
self
.
args
.
package
:
self
.
additional_args
+=
[
"-DENABLE_PACKAGING=YES"
]
self
.
additional_args
+=
[
"-DCMAKE_SKIP_INSTALL_RPATH=YES"
]
self
.
additional_args
+=
[
"-DENABLE_RELATIVE_PREFIX=YES"
]
def
clean
(
self
):
super
(
DesktopPreparator
,
self
)
.
clean
()
if
os
.
path
.
isfile
(
'Makefile'
):
os
.
remove
(
'Makefile'
)
if
os
.
path
.
isdir
(
'WORK'
)
and
not
os
.
listdir
(
'WORK'
):
os
.
rmdir
(
'WORK'
)
if
os
.
path
.
isdir
(
'OUTPUT'
)
and
not
os
.
listdir
(
'OUTPUT'
):
os
.
rmdir
(
'OUTPUT'
)
if
not
os
.
path
.
isdir
(
"submodules/linphone/mediastreamer2/src"
)
or
not
os
.
path
.
isdir
(
"submodules/linphone/oRTP/src"
):
error
(
"Missing some git submodules. Did you run:
\n\t
git submodule update --init --recursive"
)
ret
=
1
def
prepare
(
self
):
retcode
=
super
(
DesktopPreparator
,
self
)
.
prepare
()
if
retcode
!=
0
:
if
retcode
==
51
:
if
os
.
path
.
isfile
(
'Makefile'
):
Popen
(
"make help-prepare-options"
.
split
(
" "
))
retcode
=
0
return
retcode
# Only generated makefile if we are using Ninja or Makefile
if
self
.
generator
()
.
endswith
(
'Ninja'
):
if
not
check_is_installed
(
"ninja"
,
"it"
):
return
1
self
.
generate_makefile
(
'ninja -C'
)
info
(
"You can now run 'make' to build."
)
elif
self
.
generator
()
.
endswith
(
"Unix Makefiles"
):
self
.
generate_makefile
(
'$(MAKE) -C'
)
info
(
"You can now run 'make' to build."
)
elif
self
.
generator
()
==
"Xcode"
:
info
(
"You can now open Xcode project with: open WORK/cmake/Project.xcodeproj"
)
else
:
warning
(
"Not generating meta-makefile for generator {}."
.
format
(
self
.
generator
))
def
generate_makefile
(
self
,
generator
):
targets
=
self
.
args
.
target
targets_str
=
""
for
target
in
targets
:
targets_str
+=
"""
{target}: {target}-build
{target}-build:
\t
{generator} WORK/{target}/cmake
\t
@echo "Done"
"""
.
format
(
target
=
target
,
generator
=
generator
)
makefile
=
"""
targets={targets}
return
ret
.PHONY: all
all: build
def
generate_makefile
(
generator
):
makefile
=
"""
.PHONY: all
build: $(addsuffix -build, $(targets))
all:
\t
{generator} WORK/cmake
{targets_str}
pull-transifex:
\t
$(MAKE) -C linphone pull-transifex
...
...
@@ -135,139 +189,21 @@ help: help-prepare-options
\t
@echo ""
\t
@echo "(please read the README.md file first)"
\t
@echo ""
\t
@echo "Available targets:"
\t
@echo ""
\t
@echo " * all, build : normal build"
\t
@echo "Available targets: {targets}"
\t
@echo ""
"""
.
format
(
options
=
' '
.
join
(
sys
.
argv
),
generator
=
generator
)
f
=
open
(
'Makefile'
,
'w'
)
f
.
write
(
makefile
)
f
.
close
()
def
main
(
argv
=
None
):
basicConfig
(
format
=
"
%(levelname)
s:
%(message)
s"
,
level
=
INFO
)
if
argv
is
None
:
argv
=
sys
.
argv
argparser
=
argparse
.
ArgumentParser
(
description
=
"Prepare build of Linphone and its dependencies."
)
argparser
.
add_argument
(
'-ac'
,
'--all-codecs'
,
help
=
"Enable all codecs, including the non-free ones"
,
action
=
'store_true'
)
argparser
.
add_argument
(
'-c'
,
'--clean'
,
help
=
"Clean a previous build instead of preparing a build."
,
action
=
'store_true'
)
argparser
.
add_argument
(
'-C'
,
'--veryclean'
,
help
=
"Clean a previous build instead of preparing a build (also deleting the install prefix)."
,
action
=
'store_true'
)
argparser
.
add_argument
(
'-d'
,
'--debug'
,
help
=
"Prepare a debug build, eg. add debug symbols and use no optimizations."
,
action
=
'store_true'
)
argparser
.
add_argument
(
'-f'
,
'--force'
,
help
=
"Force preparation, even if working directory already exist."
,
action
=
'store_true'
)
argparser
.
add_argument
(
'-G'
,
'--generator'
,
help
=
"CMake build system generator (default: let CMake choose, use cmake -h to get the complete list)."
,
default
=
"Unix Makefiles"
,
dest
=
'generator'
)
argparser
.
add_argument
(
'-L'
,
'--list-cmake-variables'
,
help
=
"List non-advanced CMake cache variables."
,
action
=
'store_true'
,
dest
=
'list_cmake_variables'
)
argparser
.
add_argument
(
'-sys'
,
'--use-system-dependencies'
,
help
=
"Find dependencies on the system."
,
action
=
'store_true'
)
argparser
.
add_argument
(
'-p'
,
'--package'
,
help
=
"Build an installation package (only on Mac OSX and Windows)."
,
action
=
'store_true'
)
argparser
.
add_argument
(
'--python'
,
help
=
"Build Python module instead of desktop application."
,
action
=
'store_true'
)
argparser
.
add_argument
(
'--python-raspberry'
,
help
=
"Build Python module for raspberry pi instead of desktop application."
,
action
=
'store_true'
)
argparser
.
add_argument
(
'-t'
,
'--tunnel'
,
help
=
"Enable Tunnel."
,
action
=
'store_true'
)
args
,
additional_args
=
argparser
.
parse_known_args
()
if
args
.
use_system_dependencies
:
additional_args
+=
[
"-DLINPHONE_BUILDER_USE_SYSTEM_DEPENDENCIES=YES"
]
if
args
.
all_codecs
:
additional_args
+=
[
"-DENABLE_GPL_THIRD_PARTIES=YES"
]
additional_args
+=
[
"-DENABLE_NON_FREE_CODECS=YES"
]
additional_args
+=
[
"-DENABLE_AMRNB=YES"
]
additional_args
+=
[
"-DENABLE_AMRWB=YES"
]
additional_args
+=
[
"-DENABLE_G729=YES"
]
additional_args
+=
[
"-DENABLE_GSM=YES"
]
additional_args
+=
[
"-DENABLE_ILBC=YES"
]
additional_args
+=
[
"-DENABLE_ISAC=YES"
]
additional_args
+=
[
"-DENABLE_OPUS=YES"
]
additional_args
+=
[
"-DENABLE_SILK=YES"
]
additional_args
+=
[
"-DENABLE_SPEEX=YES"
]
additional_args
+=
[
"-DENABLE_FFMPEG=YES"
]
additional_args
+=
[
"-DENABLE_H263=YES"
]
additional_args
+=
[
"-DENABLE_H263P=YES"
]
additional_args
+=
[
"-DENABLE_MPEG4=YES"
]
additional_args
+=
[
"-DENABLE_OPENH264=YES"
]
additional_args
+=
[
"-DENABLE_VPX=YES"
]
additional_args
+=
[
"-DENABLE_X264=NO"
]
if
args
.
package
:
additional_args
+=
[
"-DENABLE_PACKAGING=YES"
]
additional_args
+=
[
"-DCMAKE_SKIP_INSTALL_RPATH=YES"
]
additional_args
+=
[
"-DENABLE_RELATIVE_PREFIX=YES"
]
if
check_tools
()
!=
0
:
return
1
if
args
.
tunnel
or
os
.
path
.
isdir
(
"submodules/tunnel"
):
if
not
os
.
path
.
isdir
(
"submodules/tunnel"
):
info
(
"Tunnel wanted but not found yet, trying to clone it..."
)
p
=
Popen
(
"git clone gitosis@git.linphone.org:tunnel.git submodules/tunnel"
.
split
(
" "
))
p
.
wait
()
if
p
.
returncode
!=
0
:
error
(
"Could not clone tunnel. Please see http://www.belledonne-communications.com/voiptunnel.html"
)
return
1
info
(
"Tunnel enabled."
)
additional_args
+=
[
"-DENABLE_TUNNEL=YES"
]
# install_git_hook()
"""
.
format
(
targets
=
' '
.
join
(
targets
),
targets_str
=
targets_str
,
options
=
' '
.
join
(
sys
.
argv
),
generator
=
generator
)
f
=
open
(
'Makefile'
,
'w'
)
f
.
write
(
makefile
)
f
.
close
()
target
=
None
if
args
.
python
:
target
=
PythonTarget
()
elif
args
.
python_raspberry
:
target
=
PythonRaspberryTarget
()
else
:
# for simple Makefile / ninja builds, we do not want to use grouped feature
# to ease development by having each project separated from each other
ungrouped_generators
=
[
"Unix Makefiles"
,
"Ninja"
]
use_group
=
"YES"
if
args
.
package
or
not
any
(
generator
in
args
.
generator
for
generator
in
ungrouped_generators
)
else
"NO"
target
=
DesktopTarget
(
use_group
=
use_group
)
target
.
generator
=
args
.
generator
if
args
.
clean
or
args
.
veryclean
:
if
args
.
veryclean
:
target
.
veryclean
()
else
:
target
.
clean
()
if
os
.
path
.
isfile
(
'Makefile'
):
os
.
remove
(
'Makefile'
)
else
:
retcode
=
prepare
.
run
(
target
,
args
.
debug
,
False
,
args
.
list_cmake_variables
,
args
.
force
,
additional_args
)
if
retcode
!=
0
:
if
retcode
==
51
:
Popen
(
"make help-prepare-options"
.
split
(
" "
))
retcode
=
0
return
retcode
# only generated makefile if we are using Ninja or Makefile
if
target
.
generator
.
endswith
(
'Ninja'
):
if
not
check_is_installed
(
"ninja"
,
"it"
):
return
1
generate_makefile
(
'ninja -C'
)
info
(
"You can now run 'make' to build."
)
elif
target
.
generator
.
endswith
(
"Unix Makefiles"
):
generate_makefile
(
'$(MAKE) -C'
)
info
(
"You can now run 'make' to build."
)
elif
target
.
generator
==
"Xcode"
:
info
(
"You can now open Xcode project with: open WORK/cmake/Project.xcodeproj"
)
else
:
warning
(
"Not generating meta-makefile for generator {}."
.
format
(
target
.
generator
))
return
0
def
main
():
preparator
=
DesktopPreparator
()
preparator
.
parse_args
()
if
preparator
.
check_tools
()
!=
0
:
return
1
return
preparator
.
run
()
if
__name__
==
"__main__"
:
sys
.
exit
(
main
())
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment