一、前言

目前因机器OS GCC版本太老,导致无法编译一些新版本软件,所以写了一个自动编译GCC的python脚本,操作系统是比较老的suse 10, 很多系统自动软件版本都很低,所以此脚本一般可适用目前比较流行的OS,大家可多尝试一下

二、机器环境

OS: SUSE 10 

Bit: 64-bit

python: 2.6

三、依赖软件

gmp: 4.3.2

mpc: 0.8.1

mpfr: 2.4.2

gcc: 4.4.0

四、安装脚本

1 目录结构

InstallGcc

---bin

-----install_gcc.py

---conf

---tmp

---src

-----gcc

-------gmp-4.3.2.tar.gz

-------mpc-0.8.1.tar.gz

-------mpfr-2.4.2.tar.gz

-------gcc-4.4.0.tar.gz

2 脚本如下:

#!/usr/bin/env python
import sys,os,time,commands
import logging,logging.handlers class InstallGcc(object):
def __init__(self):
self.base_dir=os.path.abspath(os.path.join(os.path.dirname(__file__),os.pardir))
self.logger = self.get_logger()
self.install_pardir='/usr/local'
self.tmp_dir = '%s/tmp' % self.base_dir
self.install_srcdir='%s/src/gcc' % self.base_dir
self.dependList={'gmp':{'version':'4.3.2','srcfile':'gmp-4.3.2.tar.bz2'},'mpc':{'version':'0.8.1','srcfile':'mpc-0.8.1.tar.gz'},'mpfr':{'version':'2.4.2','srcfile':'mpfr-2.4.2.tar.bz2'},'gcc':{'version':'4.4.0','srcfile':'gcc-4.4.0.tar.gz'}}
self.process_num = self.get_process_num() def get_logger(self):
logname = '%s/log/install_gcc.log' % self.base_dir
logger=logging.getLogger('install_mysql')
logger.setLevel(logging.DEBUG)
handler=logging.handlers.RotatingFileHandler(logname,maxBytes=4194304,backupCount=100)
formatter = logging.Formatter('%(asctime)s %(filename)s:%(lineno)d [%(levelname)s] %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
return logger
def get_process_num(self):
cmd="cat /proc/cpuinfo |grep processor|wc -l"
ret = self.get_exec_result(cmd)
return ret[1]
def get_exec_result(self,cmd):
ret = commands.getstatusoutput(cmd)
if ret[0] != 0:
self.logger.error("%s:%s",cmd,ret[1])
sys.exit(1)
return ret
def decompress_soft(self,name):
try:
srcfile=self.dependList[name]['srcfile']
if srcfile.endswith('bz2'):
cmd = "tar -jxvf %s/%s -C %s" % (self.install_srcdir,srcfile,self.tmp_dir)
elif srcfile.endswith('gz'):
cmd = "tar -zxvf %s/%s -C %s" % (self.install_srcdir,srcfile,self.tmp_dir)
ret = self.get_exec_result(cmd)
untar_dir = "%s/%s-%s" % (self.tmp_dir,name,self.dependList[name]['version'])
os.chdir(untar_dir)
except Exception,e:
self.logger.error("decompress error:%s",e)
sys.exit(1)
def install_gmp(self):
try:
install_dir='%s/gmp-%s' % (self.install_pardir,self.dependList['gmp']['version'])
if os.path.isdir(install_dir):
msg = "gmp has been existed,continuing next step"
print msg
self.logger.error(msg)
else:
self.decompress_soft('gmp')
cmd = "./configure --prefix=%s" % install_dir
ret = self.get_exec_result(cmd)
cmd = "make -j %s && make install" % (self.process_num)
ret = self.get_exec_result(cmd)
msg = "gmp installed ok,continuing next step"
print msg
self.logger.debug(msg)
except Exception,e:
self.logger.error("install gmp error:%s",e)
sys.exit(1)
def install_mpfr(self):
try:
install_dir = '%s/mpfr-%s' % (self.install_pardir,self.dependList['mpfr']['version'])
if os.path.isdir(install_dir):
msg = "mpfr has been existed,continuing next step"
print msg
self.logger.error(msg)
else:
self.decompress_soft('mpfr')
cmd = "./configure --prefix=%s --with-gmp=%s/gmp-%s" % (install_dir,self.install_pardir,self.dependList['gmp']['version'])
ret = self.get_exec_result(cmd)
cmd = "make -j %s && make install" % self.process_num
ret = self.get_exec_result(cmd)
msg = "mpfr installed ok,continuing next step"
print msg
self.logger.debug(msg)
except Exception,e:
self.logger.error("install mpfr error:%s",e)
sys.exit(1)
def install_mpc(self):
try:
install_dir = '%s/mpc-%s' % (self.install_pardir,self.dependList['mpc']['version'])
if os.path.isdir(install_dir):
msg = "mpc has been existed,continuing next step"
print msg
self.logger.error(msg)
else:
self.decompress_soft('mpc')
cmd = " ./configure --prefix=%s --with-gmp=%s/gmp-%s --with-mpfr=%s/mpfr-%s" % (install_dir,self.install_pardir,self.dependList['gmp']['version'],self.install_pardir,self.dependList['mpfr']['version'])
ret = self.get_exec_result(cmd)
cmd = "make -j %s && make install" % self.process_num
ret = self.get_exec_result(cmd)
msg = "mpc installed ok,continuing next step"
print msg
self.logger.debug(msg)
except Exception,e:
self.logger.error("install mpc error:%s",e)
sys.exit(1)
def install_gcc(self):
try:
install_dir = '%s/gcc-%s' % (self.install_pardir,self.dependList['gcc']['version'])
if os.path.isdir(install_dir):
msg = "gcc has been existed,continuing next step"
print msg
self.logger.error(msg)
else:
self.decompress_soft('gcc') gmp_dir= "%s/gmp-%s" % (self.install_pardir,self.dependList['gmp']['version'])
mpfr_dir = "%s/mpfr-%s" % (self.install_pardir,self.dependList['mpfr']['version'])
mpc_dir = "%s/mpc-%s" % (self.install_pardir,self.dependList['mpc']['version'])
enable_con = "--enable-shared --enable-threads=posix --enable-languages=c,c++,objc,obj-c++"
cmd = "export LD_LIBRARY_PATH=%s/lib:%s/lib:%s/lib:$LD_LIBRARY_PATH" % (gmp_dir,mpfr_dir,mpc_dir)
ret = self.get_exec_result(cmd)
cmd = "./configure --prefix=%s --with-gmp=%s --with-mpfr=%s --with-mpc=%s %s" % (install_dir,gmp_dir,mpfr_dir,mpc_dir,enable_con)
ret = self.get_exec_result(cmd)
cmd = "make -j %s && make install" % self.process_num
ret = self.get_exec_result(cmd)
msg = "gcc installed ok,work done"
print msg
self.logger.debug(msg)
except Exception,e:
self.logger.error("install gcc error:%s",e)
sys.exit(1)
def print_start(self,obj):
msg="%s install........[START]" % obj
self.logger.debug(msg)
print msg
def print_end(self,obj):
msg="%s install.......[DONE]" % obj
self.logger.debug(msg)
print msg
def run_install(self):
self.print_start('gmp')
self.install_gmp()
self.print_end('gmp')
self.print_start('mpfr')
self.install_mpfr()
self.print_end('mpfr')
self.print_start('mpc')
self.install_mpc()
self.print_end('mpc')
self.print_start('gcc')
self.install_gcc()
self.print_end('gcc')
if __name__ == '__main__':
obj = InstallGcc()
obj.run_install()

GCC源码自动编译-python脚本的更多相关文章

  1. Python 一键拉取Git分支源码自动解析并执行SQL语句

    基于Python实现自动拉取Git分支源码自动解析并执行SQL语句 by:授客 QQ:1033553122 1.代码用途 开发过程中,研发人员会提交SQL更新脚本到Git源码库,然后测试负责去拉取这些 ...

  2. 鸿蒙内核源码分析(编译脚本篇) | 如何防编译环境中的牛皮癣 | 百篇博客分析OpenHarmony源码 | v58.01

    百篇博客系列篇.本篇为: v58.xx 鸿蒙内核源码分析(环境脚本篇) | 编译鸿蒙原来如此简单 | 51.c.h.o 本篇用两个脚本完成鸿蒙(L1)的编译环境安装/源码下载/编译过程,让编译,调试鸿 ...

  3. 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视GCC编译全过程 | 百篇博客分析OpenHarmony源码| v57.01

    百篇博客系列篇.本篇为: v57.xx 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视编译全过程 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙 ...

  4. GCC源码编译

    1. gcc源码下载 ftp://gcc.gnu.org/pub/gcc/releases/ [yhwang@yhwang ~] wget ftp://gcc.gnu.org/pub/gcc/rele ...

  5. 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)

                 分类: Android 系统开发(5)                                              作者同类文章X 版权声明:本文为博主原创文章 ...

  6. 深入理解Faiss 原理&源码 (一) 编译

    目录 深入理解Faiss 原理&源码 (一) 编译 mac下安装 安装mac xcode工具包 安装 openblas 安装swig 安装libomp 编译faiss 附录 深入理解Faiss ...

  7. 使用 IntelliJ IDEA 导入 Spark 最新源码及编译 Spark 源代码

    前言   其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. 准备工作 1.sca ...

  8. Redis源码学习:Lua脚本

    Redis源码学习:Lua脚本 1.Sublime Text配置 我是在Win7下,用Sublime Text + Cygwin开发的,配置方法请参考<Sublime Text 3下C/C++开 ...

  9. MySQL源码包编译安装

    +++++++++++++++++++++++++++++++++++++++++++标题:MySQL数据库实力部署时间:2019年3月9日内容:MySQL源码包进行编译,然后部署MySQL单实例重点 ...

随机推荐

  1. 【C#进阶系列】00 序

    老早就被各种推荐<CLR via C#>这本书了,然而一直没去学. 因为工作中所需要的.NET功底目前算是足以应付了,而前端却不熟,所以跑去学了一段时间前端的知识. 终于算是把前端方面的基 ...

  2. CMS如何提供XML格式的接口

    在做APP的过程中,需要服务端的接口数据. 是用Json格式还是Xml格式呢,很多人会说还是xml习惯. 然而PHP更适合返回的还是json,php核心库中就包含了json编码的函数,可以直接将数组转 ...

  3. [PE结构分析] 8.输入表结构和输入地址表(IAT)

    在 PE文件头的 IMAGE_OPTIONAL_HEADER 结构中的 DataDirectory(数据目录表) 的第二个成员就是指向输入表的.每个被链接进来的 DLL文件都分别对应一个 IMAGE_ ...

  4. GWYAlertSelectView 选择收货地址和选择联系人

    iOS 开发在app内(特别是在类似购物和旅游类)经常会用到选择,添加联系人和收货地址,而且经常都是在跳转界面,很是麻烦,今天我就自己封装了一个类似弹出视图的代码,方便了很多!demo地址: http ...

  5. 股票价格涨跌预测—基于KNN分类器

    code{white-space: pre;} pre:not([class]) { background-color: white; }if (window.hljs && docu ...

  6. 探索HashMap实现原理及其在jdk8数据结构的改进

    因为网上已经太多的关于HashMap的相关文章了,为了避免大量重复,又由于网上关于java8的HashMap的相关文章比较少,至少我没有找到比较详细的.所以才有了本文. 本文主要的内容: 1.Hash ...

  7. Convert string to binary and binary to string in C#

    String to binary method: public static string StringToBinary(string data) { StringBuilder sb = new S ...

  8. 自定义View_1_关于View,ViewGroup的测量和绘制流程

    自定义View(1) ------ 关于View,ViewGroup的测量和绘制流程 在Android当中,自定义控件属于比较高级的知识体系,今天我们就一起研究研究关于自定义View的那点事,看看它到 ...

  9. stl空间配置器线程安全问题补充

    摘要 在上一篇博客<STL空间配置器那点事>简单介绍了空间配置器的基本实现 两级空间配置器处理,一级相关细节问题,同时简单描述了STL各组件之间的关系以及设计到的设计模式等. 在最后,又关 ...

  10. Mac OSX 下用 Homebrew 安装 MongoDB 并配置到 WebStorm 中

    1. 安装 Ruby OSX 操作系统内置 Ruby,但如果没有 Ruby,则需先输入以下命令安装能够进行多版本ruby环境安装.管理和切换的命令行工具 RVM. 1.1 安装 RVM 打开终端输入以 ...