Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
Alchemy Viewer
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Locked files
Deploy
Releases
Package registry
Operate
Terraform modules
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Silent mode is enabled
All outbound communications are blocked.
Learn more
.
Show more breadcrumbs
Alchemy Viewer
Alchemy Viewer
Commits
d35c4f4c
Commit
d35c4f4c
authored
12 years ago
by
Oz Linden
Browse files
Options
Downloads
Plain Diff
merge changes for DRTVWR-223
parents
18002a54
ca76f9aa
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
.hgtags
+1
-0
1 addition, 0 deletions
.hgtags
indra/lib/python/indra/util/llmanifest.py
+21
-0
21 additions, 0 deletions
indra/lib/python/indra/util/llmanifest.py
indra/newview/viewer_manifest.py
+121
-112
121 additions, 112 deletions
indra/newview/viewer_manifest.py
with
143 additions
and
112 deletions
.hgtags
+
1
−
0
View file @
d35c4f4c
...
@@ -347,3 +347,4 @@ e59ffd3fe0838ae6b09b242a6e9df71761b88f41 3.4.1-release
...
@@ -347,3 +347,4 @@ e59ffd3fe0838ae6b09b242a6e9df71761b88f41 3.4.1-release
32896d5e920ca9a29256ff3b747c2e99752aa5ae DRTVWR-217
32896d5e920ca9a29256ff3b747c2e99752aa5ae DRTVWR-217
704bbae7b182a1f2811a47a054e680522966f54a 3.4.2-beta1
704bbae7b182a1f2811a47a054e680522966f54a 3.4.2-beta1
d799593b53ed733862e9a13871e318e886469377 DRTVWR-208
d799593b53ed733862e9a13871e318e886469377 DRTVWR-208
e497dcde7a3653e384eb223a8a460030e89c294c DRTVWR-223
This diff is collapsed.
Click to expand it.
indra/lib/python/indra/util/llmanifest.py
+
21
−
0
View file @
d35c4f4c
...
@@ -626,6 +626,23 @@ def expand_globs(self, src, dst):
...
@@ -626,6 +626,23 @@ def expand_globs(self, src, dst):
d
=
src_re
.
sub
(
d_template
,
s
.
replace
(
'
\\
'
,
'
/
'
))
d
=
src_re
.
sub
(
d_template
,
s
.
replace
(
'
\\
'
,
'
/
'
))
yield
os
.
path
.
normpath
(
s
),
os
.
path
.
normpath
(
d
)
yield
os
.
path
.
normpath
(
s
),
os
.
path
.
normpath
(
d
)
def
path2basename
(
self
,
path
,
file
):
"""
It is a common idiom to write:
self.path(os.path.join(somedir, somefile), somefile)
So instead you can write:
self.path2basename(somedir, somefile)
Note that this is NOT the same as:
self.path(os.path.join(somedir, somefile))
which is the same as:
temppath = os.path.join(somedir, somefile)
self.path(temppath, temppath)
"""
return
self
.
path
(
os
.
path
.
join
(
path
,
file
),
file
)
def
path
(
self
,
src
,
dst
=
None
):
def
path
(
self
,
src
,
dst
=
None
):
sys
.
stdout
.
write
(
"
Processing %s => %s ...
"
%
(
src
,
dst
))
sys
.
stdout
.
write
(
"
Processing %s => %s ...
"
%
(
src
,
dst
))
sys
.
stdout
.
flush
()
sys
.
stdout
.
flush
()
...
@@ -671,6 +688,10 @@ def try_path(src):
...
@@ -671,6 +688,10 @@ def try_path(src):
print
"
%d files
"
%
count
print
"
%d files
"
%
count
# Let caller check whether we processed as many files as expected. In
# particular, let caller notice 0.
return
count
def
do
(
self
,
*
actions
):
def
do
(
self
,
*
actions
):
self
.
actions
=
actions
self
.
actions
=
actions
self
.
construct
()
self
.
construct
()
...
...
This diff is collapsed.
Click to expand it.
indra/newview/viewer_manifest.py
+
121
−
112
View file @
d35c4f4c
...
@@ -28,6 +28,7 @@
...
@@ -28,6 +28,7 @@
"""
"""
import
sys
import
sys
import
os.path
import
os.path
import
errno
import
re
import
re
import
tarfile
import
tarfile
import
time
import
time
...
@@ -74,20 +75,20 @@ def construct(self):
...
@@ -74,20 +75,20 @@ def construct(self):
# include the list of Lindens (if any)
# include the list of Lindens (if any)
# see https://wiki.lindenlab.com/wiki/Generated_Linden_Credits
# see https://wiki.lindenlab.com/wiki/Generated_Linden_Credits
linden_names_path
=
os
.
getenv
(
"
LINDEN_CREDITS
"
)
linden_names_path
=
os
.
getenv
(
"
LINDEN_CREDITS
"
)
if
linden_names_path
:
if
not
linden_names_path
:
print
"
No
'
LINDEN_CREDITS
'
specified in environment, using built-in list
"
else
:
try
:
try
:
linden_file
=
open
(
linden_names_path
,
'
r
'
)
linden_file
=
open
(
linden_names_path
,
'
r
'
)
except
IOError
:
print
"
No Linden names found at
'
%s
'
, using built-in list
"
%
linden_names_path
else
:
# all names should be one line, but the join below also converts to a string
# all names should be one line, but the join below also converts to a string
linden_names
=
'
,
'
.
join
(
linden_file
.
readlines
())
linden_names
=
'
,
'
.
join
(
linden_file
.
readlines
())
self
.
put_in_file
(
linden_names
,
"
lindens.txt
"
)
self
.
put_in_file
(
linden_names
,
"
lindens.txt
"
)
linden_file
.
close
()
linden_file
.
close
()
print
"
Linden names extracted from
'
%s
'"
%
linden_names_path
print
"
Linden names extracted from
'
%s
'"
%
linden_names_path
self
.
file_list
.
append
([
linden_names_path
,
self
.
dst_path_of
(
"
lindens.txt
"
)])
self
.
file_list
.
append
([
linden_names_path
,
self
.
dst_path_of
(
"
lindens.txt
"
)])
except
IOError
:
print
"
No Linden names found at
'
%s
'
, using built-in list
"
%
linden_names_path
pass
else
:
print
"
No
'
LINDEN_CREDITS
'
specified in environment, using built-in list
"
# ... and the entire windlight directory
# ... and the entire windlight directory
self
.
path
(
"
windlight
"
)
self
.
path
(
"
windlight
"
)
...
@@ -149,14 +150,9 @@ def construct(self):
...
@@ -149,14 +150,9 @@ def construct(self):
self
.
path
(
"
gpu_table.txt
"
)
self
.
path
(
"
gpu_table.txt
"
)
# The summary.json file gets left in the base checkout dir by
# The summary.json file gets left in the base checkout dir by
# build.sh. It's only created for a build.sh build, therefore we
# build.sh. It's only created for a build.sh build.
# have to check whether it exists. :-P
if
not
self
.
path2basename
(
os
.
path
.
join
(
os
.
pardir
,
os
.
pardir
),
"
summary.json
"
):
summary_json
=
"
summary.json
"
print
"
No summary.json file
"
summary_json_path
=
os
.
path
.
join
(
os
.
pardir
,
os
.
pardir
,
summary_json
)
if
os
.
path
.
exists
(
os
.
path
.
join
(
self
.
get_src_prefix
(),
summary_json_path
)):
self
.
path
(
summary_json_path
,
summary_json
)
else
:
print
"
No %s
"
%
os
.
path
.
join
(
self
.
get_src_prefix
(),
summary_json_path
)
def
login_channel
(
self
):
def
login_channel
(
self
):
"""
Channel reported for login and upgrade purposes ONLY;
"""
Channel reported for login and upgrade purposes ONLY;
...
@@ -327,13 +323,13 @@ def construct(self):
...
@@ -327,13 +323,13 @@ def construct(self):
self
.
path
(
src
=
'
%s/secondlife-bin.exe
'
%
self
.
args
[
'
configuration
'
],
dst
=
self
.
final_exe
())
self
.
path
(
src
=
'
%s/secondlife-bin.exe
'
%
self
.
args
[
'
configuration
'
],
dst
=
self
.
final_exe
())
# Plugin host application
# Plugin host application
self
.
path
(
os
.
path
.
join
(
os
.
pardir
,
self
.
path
2basename
(
os
.
path
.
join
(
os
.
pardir
,
'
llplugin
'
,
'
slplugin
'
,
self
.
args
[
'
configuration
'
]
,
"
slplugin.exe
"
),
'
llplugin
'
,
'
slplugin
'
,
self
.
args
[
'
configuration
'
]),
"
slplugin.exe
"
)
"
slplugin.exe
"
)
#self.disable_manifest_check()
#self.disable_manifest_check()
self
.
path
(
src
=
"
../viewer_components/updater/scripts/windows
/update_install.bat
"
,
dst
=
"
update_install.bat
"
)
self
.
path
2basename
(
"
../viewer_components/updater/scripts/windows
"
,
"
update_install.bat
"
)
# Get shared libs from the shared libs staging directory
# Get shared libs from the shared libs staging directory
if
self
.
prefix
(
src
=
os
.
path
.
join
(
os
.
pardir
,
'
sharedlibs
'
,
self
.
args
[
'
configuration
'
]),
if
self
.
prefix
(
src
=
os
.
path
.
join
(
os
.
pardir
,
'
sharedlibs
'
,
self
.
args
[
'
configuration
'
]),
dst
=
""
):
dst
=
""
):
...
@@ -367,9 +363,7 @@ def construct(self):
...
@@ -367,9 +363,7 @@ def construct(self):
# Get fmod dll, continue if missing
# Get fmod dll, continue if missing
try
:
if
not
self
.
path
(
"
fmod.dll
"
):
self
.
path
(
"
fmod.dll
"
)
except
:
print
"
Skipping fmod.dll
"
print
"
Skipping fmod.dll
"
# For textures
# For textures
...
@@ -711,85 +705,82 @@ def construct(self):
...
@@ -711,85 +705,82 @@ def construct(self):
self
.
path
(
"
uk.lproj
"
)
self
.
path
(
"
uk.lproj
"
)
self
.
path
(
"
zh-Hans.lproj
"
)
self
.
path
(
"
zh-Hans.lproj
"
)
libdir
=
"
../packages/lib/release
"
def
path_optional
(
src
,
dst
):
dylibs
=
{}
"""
For a number of our self.path() calls, not only do we want
to deal with the absence of src, we also want to remember
which were present. Return either an empty list (absent)
or a list containing dst (present). Concatenate these
return values to get a list of all libs that are present.
"""
if
self
.
path
(
src
,
dst
):
return
[
dst
]
print
"
Skipping %s
"
%
dst
return
[]
# Need to get the llcommon dll from any of the build directories as well
libdir
=
"
../packages/lib/release
"
lib
=
"
llcommon
"
# dylibs is a list of all the .dylib files we expect to need
libfile
=
"
lib%s.dylib
"
%
lib
# in our bundled sub-apps. For each of these we'll create a
try
:
# symlink from sub-app/Contents/Resources to the real .dylib.
self
.
path
(
self
.
find_existing_file
(
os
.
path
.
join
(
os
.
pardir
,
# Need to get the llcommon dll from any of the build directories as well.
lib
,
libfile
=
"
libllcommon.dylib
"
self
.
args
[
'
configuration
'
],
dylibs
=
path_optional
(
self
.
find_existing_file
(
os
.
path
.
join
(
os
.
pardir
,
libfile
),
"
llcommon
"
,
os
.
path
.
join
(
libdir
,
libfile
)),
self
.
args
[
'
configuration
'
],
dst
=
libfile
)
libfile
),
except
RuntimeError
:
os
.
path
.
join
(
libdir
,
libfile
)),
print
"
Skipping %s
"
%
libfile
dst
=
libfile
)
dylibs
[
lib
]
=
False
else
:
for
libfile
in
(
dylibs
[
lib
]
=
True
"
libapr-1.0.dylib
"
,
"
libaprutil-1.0.dylib
"
,
if
dylibs
[
"
llcommon
"
]:
"
libcollada14dom.dylib
"
,
for
libfile
in
(
"
libapr-1.0.dylib
"
,
"
libexpat.1.5.2.dylib
"
,
"
libaprutil-1.0.dylib
"
,
"
libexception_handler.dylib
"
,
"
libexpat.1.5.2.dylib
"
,
"
libGLOD.dylib
"
,
"
libexception_handler.dylib
"
,
):
"
libGLOD.dylib
"
,
dylibs
+=
path_optional
(
os
.
path
.
join
(
libdir
,
libfile
),
libfile
)
"
libcollada14dom.dylib
"
):
# SLVoice and vivox lols, no symlinks needed
self
.
path
(
os
.
path
.
join
(
libdir
,
libfile
),
libfile
)
for
libfile
in
(
'
libortp.dylib
'
,
# SLVoice and vivox lols
'
libsndfile.dylib
'
,
for
libfile
in
(
'
libsndfile.dylib
'
,
'
libvivoxoal.dylib
'
,
'
libortp.dylib
'
,
\
'
libvivoxoal.dylib
'
,
'
libvivoxsdk.dylib
'
,
'
libvivoxplatform.dylib
'
,
'
SLVoice
'
)
:
'
libvivoxsdk.dylib
'
,
self
.
path
(
os
.
path
.
join
(
libdir
,
libfile
),
libfile
)
'
libvivoxplatform.dylib
'
,
'
SLVoice
'
,
):
self
.
path2basename
(
libdir
,
libfile
)
try
:
# FMOD for sound
# FMOD for sound
libfile
=
"
libfmodwrapper.dylib
"
self
.
path
(
self
.
args
[
'
configuration
'
]
+
"
/libfmodwrapper.dylib
"
,
"
libfmodwrapper.dylib
"
)
path_optional
(
os
.
path
.
join
(
self
.
args
[
'
configuration
'
],
libfile
),
libfile
)
except
:
print
"
Skipping FMOD - not found
"
# our apps
# our apps
self
.
path
(
"
../mac_crash_logger/
"
+
self
.
args
[
'
configuration
'
]
+
"
/mac-crash-logger.app
"
,
"
mac-crash-logger.app
"
)
for
app_bld_dir
,
app
in
((
"
mac_crash_logger
"
,
"
mac-crash-logger.app
"
),
self
.
path
(
"
../mac_updater/
"
+
self
.
args
[
'
configuration
'
]
+
"
/mac-updater.app
"
,
"
mac-updater.app
"
)
(
"
mac_updater
"
,
"
mac-updater.app
"
),
# plugin launcher
# plugin launcher
(
os
.
path
.
join
(
"
llplugin
"
,
"
slplugin
"
),
"
SLPlugin.app
"
),
self
.
path
(
"
../llplugin/slplugin/
"
+
self
.
args
[
'
configuration
'
]
+
"
/SLPlugin.app
"
,
"
SLPlugin.app
"
)
):
self
.
path2basename
(
os
.
path
.
join
(
os
.
pardir
,
# our apps dependencies on shared libs
app_bld_dir
,
self
.
args
[
'
configuration
'
]),
if
dylibs
[
"
llcommon
"
]:
app
)
mac_crash_logger_res_path
=
self
.
dst_path_of
(
"
mac-crash-logger.app/Contents/Resources
"
)
mac_updater_res_path
=
self
.
dst_path_of
(
"
mac-updater.app/Contents/Resources
"
)
# our apps dependencies on shared libs
slplugin_res_path
=
self
.
dst_path_of
(
"
SLPlugin.app/Contents/Resources
"
)
# for each app, for each dylib we collected in dylibs,
for
libfile
in
(
"
libllcommon.dylib
"
,
# create a symlink to the real copy of the dylib.
"
libapr-1.0.dylib
"
,
resource_path
=
self
.
dst_path_of
(
os
.
path
.
join
(
app
,
"
Contents
"
,
"
Resources
"
))
"
libaprutil-1.0.dylib
"
,
for
libfile
in
dylibs
:
"
libexpat.1.5.2.dylib
"
,
symlinkf
(
os
.
path
.
join
(
os
.
pardir
,
os
.
pardir
,
os
.
pardir
,
libfile
),
"
libexception_handler.dylib
"
,
os
.
path
.
join
(
resource_path
,
libfile
))
"
libGLOD.dylib
"
,
"
libcollada14dom.dylib
"
):
target_lib
=
os
.
path
.
join
(
'
../../..
'
,
libfile
)
self
.
run_command
(
"
ln -sf %(target)r %(link)r
"
%
{
'
target
'
:
target_lib
,
'
link
'
:
os
.
path
.
join
(
mac_crash_logger_res_path
,
libfile
)}
)
self
.
run_command
(
"
ln -sf %(target)r %(link)r
"
%
{
'
target
'
:
target_lib
,
'
link
'
:
os
.
path
.
join
(
mac_updater_res_path
,
libfile
)}
)
self
.
run_command
(
"
ln -sf %(target)r %(link)r
"
%
{
'
target
'
:
target_lib
,
'
link
'
:
os
.
path
.
join
(
slplugin_res_path
,
libfile
)}
)
# plugins
# plugins
if
self
.
prefix
(
src
=
""
,
dst
=
"
llplugin
"
):
if
self
.
prefix
(
src
=
""
,
dst
=
"
llplugin
"
):
self
.
path
(
"
../media_plugins/quicktime/
"
+
self
.
args
[
'
configuration
'
]
+
"
/media_plugin_quicktime.dylib
"
,
"
media_plugin_quicktime.dylib
"
)
self
.
path2basename
(
"
../media_plugins/quicktime/
"
+
self
.
args
[
'
configuration
'
],
self
.
path
(
"
../media_plugins/webkit/
"
+
self
.
args
[
'
configuration
'
]
+
"
/media_plugin_webkit.dylib
"
,
"
media_plugin_webkit.dylib
"
)
"
media_plugin_quicktime.dylib
"
)
self
.
path
(
"
../packages/lib/release/libllqtwebkit.dylib
"
,
"
libllqtwebkit.dylib
"
)
self
.
path2basename
(
"
../media_plugins/webkit/
"
+
self
.
args
[
'
configuration
'
],
"
media_plugin_webkit.dylib
"
)
self
.
path2basename
(
"
../packages/lib/release
"
,
"
libllqtwebkit.dylib
"
)
self
.
end_prefix
(
"
llplugin
"
)
self
.
end_prefix
(
"
llplugin
"
)
...
@@ -956,20 +947,25 @@ def construct(self):
...
@@ -956,20 +947,25 @@ def construct(self):
self
.
path
(
"
client-readme-voice.txt
"
,
"
README-linux-voice.txt
"
)
self
.
path
(
"
client-readme-voice.txt
"
,
"
README-linux-voice.txt
"
)
self
.
path
(
"
client-readme-joystick.txt
"
,
"
README-linux-joystick.txt
"
)
self
.
path
(
"
client-readme-joystick.txt
"
,
"
README-linux-joystick.txt
"
)
self
.
path
(
"
wrapper.sh
"
,
"
secondlife
"
)
self
.
path
(
"
wrapper.sh
"
,
"
secondlife
"
)
self
.
path
(
"
handle_secondlifeprotocol.sh
"
,
"
etc/handle_secondlifeprotocol.sh
"
)
if
self
.
prefix
(
src
=
""
,
dst
=
"
etc
"
):
self
.
path
(
"
register_secondlifeprotocol.sh
"
,
"
etc/register_secondlifeprotocol.sh
"
)
self
.
path
(
"
handle_secondlifeprotocol.sh
"
)
self
.
path
(
"
refresh_desktop_app_entry.sh
"
,
"
etc/refresh_desktop_app_entry.sh
"
)
self
.
path
(
"
register_secondlifeprotocol.sh
"
)
self
.
path
(
"
launch_url.sh
"
,
"
etc/launch_url.sh
"
)
self
.
path
(
"
refresh_desktop_app_entry.sh
"
)
self
.
path
(
"
launch_url.sh
"
)
self
.
end_prefix
(
"
etc
"
)
self
.
path
(
"
install.sh
"
)
self
.
path
(
"
install.sh
"
)
self
.
end_prefix
(
"
linux_tools
"
)
self
.
end_prefix
(
"
linux_tools
"
)
# Create an appropriate gridargs.dat for this package, denoting required grid.
# Create an appropriate gridargs.dat for this package, denoting required grid.
self
.
put_in_file
(
self
.
flags_list
(),
'
etc/gridargs.dat
'
)
self
.
put_in_file
(
self
.
flags_list
(),
'
etc/gridargs.dat
'
)
self
.
path
(
"
secondlife-bin
"
,
"
bin/do-not-directly-run-secondlife-bin
"
)
if
self
.
prefix
(
src
=
""
,
dst
=
"
bin
"
):
self
.
path
(
"
../linux_crash_logger/linux-crash-logger
"
,
"
bin/linux-crash-logger.bin
"
)
self
.
path
(
"
secondlife-bin
"
,
"
do-not-directly-run-secondlife-bin
"
)
self
.
path
(
"
../linux_updater/linux-updater
"
,
"
bin/linux-updater.bin
"
)
self
.
path
(
"
../linux_crash_logger/linux-crash-logger
"
,
"
linux-crash-logger.bin
"
)
self
.
path
(
"
../llplugin/slplugin/SLPlugin
"
,
"
bin/SLPlugin
"
)
self
.
path
(
"
../linux_updater/linux-updater
"
,
"
linux-updater.bin
"
)
self
.
path2basename
(
"
../llplugin/slplugin
"
,
"
SLPlugin
"
)
self
.
path2basename
(
"
../viewer_components/updater/scripts/linux
"
,
"
update_install
"
)
self
.
end_prefix
(
"
bin
"
)
if
self
.
prefix
(
"
res-sdl
"
):
if
self
.
prefix
(
"
res-sdl
"
):
self
.
path
(
"
*
"
)
self
.
path
(
"
*
"
)
...
@@ -985,17 +981,13 @@ def construct(self):
...
@@ -985,17 +981,13 @@ def construct(self):
self
.
end_prefix
(
"
res-sdl
"
)
self
.
end_prefix
(
"
res-sdl
"
)
self
.
end_prefix
(
icon_path
)
self
.
end_prefix
(
icon_path
)
self
.
path
(
"
../viewer_components/updater/scripts/linux/update_install
"
,
"
bin/update_install
"
)
# plugins
# plugins
if
self
.
prefix
(
src
=
""
,
dst
=
"
bin/llplugin
"
):
if
self
.
prefix
(
src
=
""
,
dst
=
"
bin/llplugin
"
):
self
.
path
(
"
../media_plugins/webkit
/libmedia_plugin_webkit.so
"
,
"
libmedia_plugin_webkit.so
"
)
self
.
path
2basename
(
"
../media_plugins/webkit
"
,
"
libmedia_plugin_webkit.so
"
)
self
.
path
(
"
../media_plugins/gstreamer010/libmedia_plugin_gstreamer010.so
"
,
"
libmedia_plugin_gstreamer.so
"
)
self
.
path
(
"
../media_plugins/gstreamer010/libmedia_plugin_gstreamer010.so
"
,
"
libmedia_plugin_gstreamer.so
"
)
self
.
end_prefix
(
"
bin/llplugin
"
)
self
.
end_prefix
(
"
bin/llplugin
"
)
try
:
if
not
self
.
path
(
"
../llcommon/libllcommon.so
"
,
"
lib/libllcommon.so
"
):
self
.
path
(
"
../llcommon/libllcommon.so
"
,
"
lib/libllcommon.so
"
)
except
:
print
"
Skipping llcommon.so (assuming llcommon was linked statically)
"
print
"
Skipping llcommon.so (assuming llcommon was linked statically)
"
self
.
path
(
"
featuretable_linux.txt
"
)
self
.
path
(
"
featuretable_linux.txt
"
)
...
@@ -1079,11 +1071,8 @@ def construct(self):
...
@@ -1079,11 +1071,8 @@ def construct(self):
self
.
path
(
"
libopenjpeg.so*
"
)
self
.
path
(
"
libopenjpeg.so*
"
)
self
.
path
(
"
libdirectfb-1.4.so.5
"
)
self
.
path
(
"
libdirectfb-1.4.so.5
"
)
self
.
path
(
"
libfusion-1.4.so.5
"
)
self
.
path
(
"
libfusion-1.4.so.5
"
)
self
.
path
(
"
libdirect-1.4.so.5.0.4
"
)
self
.
path
(
"
libdirect-1.4.so.5*
"
)
self
.
path
(
"
libdirect-1.4.so.5
"
)
self
.
path
(
"
libhunspell-1.3.so*
"
)
self
.
path
(
"
libhunspell-1.3.so
"
)
self
.
path
(
"
libhunspell-1.3.so.0
"
)
self
.
path
(
"
libhunspell-1.3.so.0.0.0
"
)
self
.
path
(
"
libalut.so
"
)
self
.
path
(
"
libalut.so
"
)
self
.
path
(
"
libopenal.so
"
,
"
libopenal.so.1
"
)
self
.
path
(
"
libopenal.so
"
,
"
libopenal.so.1
"
)
self
.
path
(
"
libopenal.so
"
,
"
libvivoxoal.so.1
"
)
# vivox's sdk expects this soname
self
.
path
(
"
libopenal.so
"
,
"
libvivoxoal.so.1
"
)
# vivox's sdk expects this soname
...
@@ -1146,5 +1135,25 @@ def construct(self):
...
@@ -1146,5 +1135,25 @@ def construct(self):
################################################################
################################################################
def
symlinkf
(
src
,
dst
):
"""
Like ln -sf, but uses os.symlink() instead of running ln.
"""
try
:
os
.
symlink
(
src
,
dst
)
except
OSError
,
err
:
if
err
.
errno
!=
errno
.
EEXIST
:
raise
# We could just blithely attempt to remove and recreate the target
# file, but that strategy doesn't work so well if we don't have
# permissions to remove it. Check to see if it's already the
# symlink we want, which is the usual reason for EEXIST.
if
not
(
os
.
path
.
islink
(
dst
)
and
os
.
readlink
(
dst
)
==
src
):
# Here either dst isn't a symlink or it's the wrong symlink.
# Remove and recreate. Caller will just have to deal with any
# exceptions at this stage.
os
.
remove
(
dst
)
os
.
symlink
(
src
,
dst
)
if
__name__
==
"
__main__
"
:
if
__name__
==
"
__main__
"
:
main
()
main
()
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment