Skip to content

SunriseChen/BuildLibrary

Repository files navigation

# 项目的目标 #
在各种主流的操作系统下,以简单、一致的方式构建各种开源库,以方便在项目中引入并使用。

# 主流操作系统 #
主要包括:Windows 和 Linux 等。

# 开源库主要以常用、稳定、最新为准 #
主要包括:STLport, ZLib, OpenSSL, Boost 等。

构建:尽可能一键部署,并且部署是从下载、构建、清理、引用等均尽可能自动化完成。

使用技术:以 Python, SCons 等为主,以便可以跨平台使用。

# 需要考虑的地方 #
每个开源库的下载地址均涉及版本等因素,设计时需要考虑;
构建时的中间文件存放位置需要统一考虑;
生成的目标文件存放位置也需要统一考虑,并涉及其他项目的引用问题;
构建目标涉及不同版本,包括动态库、静态库,Debug/Release 版,32/64 bit 版,MT/MD 版,Windows/Linux 版,msvc/gcc 等多钟情况,具体可以参考 Boost 库的做法;

# 设计考虑 #
1、由于模块众多,版本众多,相互的依赖关系也非常复杂,而我们通常都是使用最新的稳定版本为主的,所以构建时不考虑兼容旧版本,一律以构建最新稳定版本为目标。
2、关于各类文件的存储及删除,需要考虑如下这些:下载文件、解压文件、构建的中间文件、目标文件,这四类文件均能配置不同的存储位置及是否保留。
3、文件路径组织方式:lib-prefix/lib_name/toolset/threading/ABI/ver
4、配置参数分为如下这些:全局、模块、命令行,这三类参数以后者优先为原则。
5、另一个可以参考的是 setuptools 的做法。

Windows:	http://www.boost.org/doc/libs/1_52_0/more/getting_started/windows.html

Linux:		http://www.boost.org/doc/libs/1_52_0/more/getting_started/unix-variants.html

# 参考 setuptools 的做法 #

下载 ez_setup.py 并执行

	...>python ez_setup.py
	Downloading http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-p
	y2.7.egg
	Processing setuptools-0.6c11-py2.7.egg
	Copying setuptools-0.6c11-py2.7.egg to d:\python27\lib\site-packages
	Adding setuptools 0.6c11 to easy-install.pth file
	Installing easy_install-script.py script to D:\Python27\Scripts
	Installing easy_install.exe script to D:\Python27\Scripts
	Installing easy_install.exe.manifest script to D:\Python27\Scripts
	Installing easy_install-2.7-script.py script to D:\Python27\Scripts
	Installing easy_install-2.7.exe script to D:\Python27\Scripts
	Installing easy_install-2.7.exe.manifest script to D:\Python27\Scripts

	Installed d:\python27\lib\site-packages\setuptools-0.6c11-py2.7.egg
	Processing dependencies for setuptools==0.6c11
	Finished processing dependencies for setuptools==0.6c11

设置 Python 路径:D:\Python27\;D:\Python27\Scripts;

	...>easy_install scons
	Searching for scons
	Reading http://pypi.python.org/simple/scons/
	Reading http://www.scons.org/
	Reading http://www.scons.org
	Best match: scons 2.2.0
	Downloading http://prdownloads.sourceforge.net/scons/scons-2.2.0.zip
	Processing scons-2.2.0.zip
	Running scons-2.2.0\setup.py -q bdist_egg --dist-dir c:\users\admini~1\appdata\l
	ocal\temp\easy_install-f1sibf\scons-2.2.0\egg-dist-tmp-ik8zx1
	zip_safe flag not set; analyzing archive contents...
	scons-2.2.0.SCons.compat.__init__: module references __file__
	scons-2.2.0.SCons.Platform.__init__: module references __path__
	scons-2.2.0.SCons.Script.Main: module references __file__
	scons-2.2.0.SCons.Script.Main: module references __path__
	scons-2.2.0.SCons.Script.SConscript: module references __file__
	scons-2.2.0.SCons.Tool.__init__: module references __path__
	scons-2.2.0.SCons.Tool.packaging.__init__: module references __path__
	Installed SCons library modules into build\bdist.win-amd64\egg\scons-2.2.0
	Installed SCons scripts into build\bdist.win-amd64\egg\EGG-INFO\scripts
	Adding scons 2.2.0 to easy-install.pth file
	Installing scons-2.2.0.bat script to D:\Python27\Scripts
	Installing scons-2.2.0.py script to D:\Python27\Scripts
	Installing scons-time-2.2.0.py script to D:\Python27\Scripts
	Installing scons-time.py script to D:\Python27\Scripts
	Installing scons.bat script to D:\Python27\Scripts
	Installing scons.py script to D:\Python27\Scripts
	Installing sconsign-2.2.0.py script to D:\Python27\Scripts
	Installing sconsign.py script to D:\Python27\Scripts

	Installed d:\python27\lib\site-packages\scons-2.2.0-py2.7.egg
	Processing dependencies for scons
	Finished processing dependencies for scons

# 具体设计 #

## 0. 前提 ##
有 Python 2.7; >= 2.4
有 git, svn, msvc / gcc / ... 并可直接执行(有 path 环境)或通过搜索得到路径

### 1. 主流程 ###
a. 下载 bl_setup.py 到 .../lib/build_lib/ 下面
b. 执行 python bl_setup.py
   自动下载并设置 build_lib
   自动下载并安装 setuptools 和 scons
c. 执行 python build.py lib1 lib2 ...
   自动发现、下载、构建、安装、更新、清理各个 lib,并自动管理依赖关系

### 2. 各 lib 流程 ###
a. 自动发现最新稳定版本或者通过 library_info 指定
b. 比较当前 lib 版本和目标 lib 版本是否一致
c. 下载指定版本的 lib 包
d. 解包、构建
e. 安装、清理

### 3. 设置(settings.py + settings.py.default) ###
a. 全局
b. lib 局部
c. sub_lib 局部
d. 命令行参数
e. 构建参数:
   最新稳定版本 / 指定版本
   静 / 动态库
   release / debug
   i386 / amd64 / ia64
   mt / md
   msvc / gcc / ...
f. 生成的库:
   STLport
   ZLib
   OpenSSL
   Boost

### 4. 库的数据(library_info.py + library_info/*) ###
a. lib 库(library_info/lib_name.py + library_info/lib_name/*)
b. sub_lib 库(library_info/lib_name/sub_lib_name.py + library_info/lib_name/sub_lib_name/*)

### 5. 相关文件 ###
readme.txt
bl_setup.py
settings.py.default
settings.py
library_info.py
library_info/*
build.py

### 6. 关键功能 ###
a. 下载
b. 自动发现程序
c. 自动发现最新稳定版本

About

构建代码库的脚本项目

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published