forked from conan-community/conan-zlib
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconanfile.py
120 lines (106 loc) · 5.82 KB
/
conanfile.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
from conans import ConanFile, tools, CMake, AutoToolsBuildEnvironment
from conans.util import files
import os
class ZlibConan(ConanFile):
name = "zlib"
version = "1.2.11"
ZIP_FOLDER_NAME = "zlib-%s" % version
generators = "cmake"
settings = "os", "arch", "compiler", "build_type"
options = {"shared": [True, False]}
default_options = "shared=False"
exports_sources = ["CMakeLists.txt", "FindZLIB.cmake"]
url = "http://github.com/wumuzi520/conan-zlib"
license = "http://www.zlib.net/zlib_license.html"
description = "A Massively Spiffy Yet Delicately Unobtrusive Compression Library " \
"(Also Free, Not to Mention Unencumbered by Patents)"
def configure(self):
del self.settings.compiler.libcxx
def source(self):
z_name = "zlib-%s.tar.gz" % self.version
tools.download("https://codeload.github.com/madler/zlib/tar.gz/v%s" % self.version, z_name)
tools.unzip(z_name)
os.unlink(z_name)
files.rmdir("%s/contrib" % self.ZIP_FOLDER_NAME)
if self.settings.os != "Windows":
self.run("chmod +x ./%s/configure" % self.ZIP_FOLDER_NAME)
def build(self):
with tools.chdir(os.path.join(self.source_folder, self.ZIP_FOLDER_NAME)):
files.mkdir("_build")
with tools.chdir("_build"):
if not tools.os_info.is_windows:
env_build = AutoToolsBuildEnvironment(self)
if self.settings.arch in ["x86", "x86_64"] and self.settings.compiler in ["apple-clang", "clang", "gcc"]:
env_build.flags.append('-mstackrealign')
env_build.fpic = True
if self.settings.os == "Macos":
old_str = '-install_name $libdir/$SHAREDLIBM'
new_str = '-install_name $SHAREDLIBM'
tools.replace_in_file("../configure", old_str, new_str)
if self.settings.os == "Windows": # Cross building to Linux
tools.replace_in_file("../configure", 'LDSHAREDLIBC="${LDSHAREDLIBC--lc}"', 'LDSHAREDLIBC=""')
# Zlib configure doesnt allow this parameters
env_build.configure("../", build=False, host=False, target=False)
env_build.make()
else:
cmake = CMake(self)
cmake.configure(build_dir=".")
cmake.build(build_dir=".")
def package(self):
self.output.warn("local cache: %s" % self.in_local_cache)
self.output.warn("develop: %s" % self.develop)
# Extract the License/s from the header to a file
with tools.chdir(os.path.join(self.source_folder, self.ZIP_FOLDER_NAME)):
tmp = tools.load("zlib.h")
license_contents = tmp[2:tmp.find("*/", 1)]
tools.save("LICENSE", license_contents)
self.copy("FindZLIB.cmake", ".", ".")
# Copy the license files
self.copy("LICENSE", src=self.ZIP_FOLDER_NAME, dst=".")
# Copy pc file
self.copy("*.pc", dst="", keep_path=False)
# Copying zlib.h, zutil.h, zconf.h
self.copy("*.h", "include", "%s" % self.ZIP_FOLDER_NAME, keep_path=False)
self.copy("*.h", "include", "%s" % "_build", keep_path=False)
# Copying static and dynamic libs
build_dir = os.path.join(self.ZIP_FOLDER_NAME, "_build")
if self.settings.os == "Windows":
if self.options.shared:
build_dir = os.path.join(self.ZIP_FOLDER_NAME, "_build")
self.copy(pattern="*.dll", dst="bin", src=build_dir, keep_path=False)
build_dir = os.path.join(self.ZIP_FOLDER_NAME, "_build/lib")
self.copy(pattern="*zlibd.lib", dst="lib", src=build_dir, keep_path=False)
self.copy(pattern="*zlib.lib", dst="lib", src=build_dir, keep_path=False)
self.copy(pattern="*zlib.dll.a", dst="lib", src=build_dir, keep_path=False)
else:
build_dir = os.path.join(self.ZIP_FOLDER_NAME, "_build/lib")
if self.settings.os == "Windows":
# MinGW
self.copy(pattern="libzlibstaticd.a", dst="lib", src=build_dir, keep_path=False)
self.copy(pattern="libzlibstatic.a", dst="lib", src=build_dir, keep_path=False)
# Visual Studio
self.copy(pattern="zlibstaticd.lib", dst="lib", src=build_dir, keep_path=False)
self.copy(pattern="zlibstatic.lib", dst="lib", src=build_dir, keep_path=False)
lib_path = os.path.join(self.package_folder, "lib")
suffix = "d" if self.settings.build_type == "Debug" else ""
if self.settings.compiler == "Visual Studio":
current_lib = os.path.join(lib_path, "zlibstatic%s.lib" % suffix)
os.rename(current_lib, os.path.join(lib_path, "zlib%s.lib" % suffix))
elif self.settings.compiler == "gcc":
current_lib = os.path.join(lib_path, "libzlibstatic.a")
os.rename(current_lib, os.path.join(lib_path, "libzlib.a"))
else:
if self.options.shared:
if self.settings.os == "Macos":
self.copy(pattern="*.dylib", dst="lib", src=build_dir, keep_path=False)
else:
self.copy(pattern="*.so*", dst="lib", src=build_dir, keep_path=False)
else:
self.copy(pattern="*.a", dst="lib", src=build_dir, keep_path=False)
def package_info(self):
if self.settings.os == "Windows":
self.cpp_info.libs = ['zlib']
if self.settings.build_type == "Debug" and self.settings.compiler == "Visual Studio":
self.cpp_info.libs[0] += "d"
else:
self.cpp_info.libs = ['z']