菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
477
0

Linux下编译安装源码包软件 configure ,make, make install, make test/check, make clean 假目标

原创
05/13 14:22
阅读数 4436

http://www.360doc7.net/wxarticlenew/541275971.html

 

一、程序的组成部分

Linux下程序大都是由以下几部分组成:

二进制文件:也就是可以运行的程序文件

库文件:就是通常我们见到的lib目录下的文件

配置文件:这个不必多说,都知道

帮助文档:通常是我们在linux下用man命令查看的命令的文档

 

二、linux下程序的存放目录

linux程序的存放目录大致有三个地方:

/etc, /bin, /sbin, /lib  :系统启动就需要用到的程序,这些目录不能挂载额外的分区,必须在根文件系统的分区上

/usr/bin,/usr/sbin,/usr/lib:操作系统核心功能,可以单独分区

/usr/local/bin,/usr/local/sbin,/usr/local/lib,/usr/local/etc,/usr/local/man:这个用于安装第三方程序,分别对应了二进制文件、库文件、配置文件、帮助文档的目录

通常来说我们安装程序就安装在 /usr/local目录下

 

三、编译安装源程序

1、使用如下命令查看当前是否安装了gcc编译器,没有可以先用yum安装gcc

gcc --version #查看是否安装gcc

2、解压源码包,例如:

tar -xvf nginx-1.7.7.tar.gz #解压源码包

3、进入解压好的源码包:

cd nginx-1.7.7 #进入源码包

4、执行configure文件,此文件有两个功能:1、让用户选定编译特性;2、检查编译环境。configure执行后将生成MakeFile文件。例如:

./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf

其中我们通过--prefix制定了安装路径,通过--conf-path制定了配置文件的具体位置。注意:不是所有的程序的configure参数都是一样的 可以使用 ./configure --help查看详细参数说明。如果该程序所依赖的库在当前系统中没有安装,则会导致configure最后报错,遇到这种情况就需要你先安装依赖库。

5、执行make命令,编译程序

make

6、编译成功后就可以安装了,执行如下命令

make install

到此程序就算安装完成了,但是不要忘了还有后续的配置哦

 

四、配置程序

1、修改PATH环境变量,以能够识别此程序的二进制文件路径;

修改/etc/profile文件,在文件中 添加

export PATH=$PATH:/path/to/somewhere  #记得是可执行文件所在的目录,路径中不要包含可执行文件。

然后执行 :

source /etc/profile #是我们的修改生效

2、默认情况下,系统搜索库文件的路径/lib, /usr/lib; 要增添额外搜寻路径(注意:有的程序不提供库文件,那就不需要此设置了)

在/etc/ld.so.conf.d/中创建以.conf为后缀名的文件,而后把要增添的路径直接写至此文件中;然后执行如下命令使其生效

ldconfig

3、如果程序提供了库文件,也会相应的提供头文件,一般在安装目录的include目录下,系统默认扫描头文件的路径是:/usr/include。我们可以在/usr/include下用链接连接到我们安装程序的头文件。

ln -s /usr/local/nginx/include /usr/include/yourname

4、可能程序还提供了帮助文档,一般是安装目录下的man目录,为了我们可以使用man命令查看我们程序的帮助文档,我们需要:在/etc/man.config中添加一条MANPATH,指向我们的文档目录

 

The magic behind configure, make, make install https://robots.thoughtbot.com/the-magic-behind-configure-make-make-install

The magic behind configure, make, make install

 January 19, 2015 UPDATED ON June 12, 2015

If you’ve used any flavour of Unix for development, you’ve probably installed software from source with this magic incantation:

./configure
make
make install

I know I’ve typed it a lot, but in my early days using Linux I didn’t really understand what it meant, I just knew that if I wanted to install software this was the spell to recite.

Recently I’ve been building my own Unix tools, and I wanted to tap into this standard install process; not only is it familiar to many Unix users, it’s also a great starting point for building a package for Homebrew and the various Linux and BSD package managers. It was time to dig into the Unix Grimoire and find out what the incantation does.

What does all of this do

There are three distinct steps in this process:

1. Configure the software

The configure script is responsible for getting ready to build the software on your specific system. It makes sure all of the dependencies for the rest of the build and install process are available, and finds out whatever it needs to know to use those dependencies.

Unix programs are often written in C, so we’ll usually need a C compiler to build them. In these cases the configure script will establish that your system does indeed have a C compiler, and find out what it’s called and where to find it.

2. Build the software

Once configure has done its job, we can invoke make to build the software. This runs a series of tasks defined in a Makefile to build the finished program from its source code.

The tarball you download usually doesn’t include a finished Makefile. Instead it comes with a template called Makefile.in and the configure script produces a customised Makefile specific to your system.

3. Install the software

Now that the software is built and ready to run, the files can be copied to their final destinations. The make install command will copy the built program, and its libraries and documentation, to the correct locations.

This usually means that the program’s binary will be copied to a directory on your PATH, the program’s manual page will be copied to a directory on your MANPATH, and any other files it depends on will be safely stored in the appropriate place.

Since the install step is also defined in the Makefile, where the software is installed can change based on options passed to the configure script, or things the configure script discovered about your system.

Depending on where the software is being installed, you might need escalated permissions for this step so you can copy files to system directories. Using sudo will often do the trick.

Where do these scripts come from

All of this works because a configure script examines your system, and uses the information it finds to convert a Makefile.in template into a Makefile, but where do the configure script and the Makefile.in template come from?

If you’ve ever opened up a configure script, or associated Makefile.in, you will have seen that they are thousands of lines of dense shell script. Sometimes these supporting scripts are longer than the source code of the program they install.

Even starting from an existing configure script, it would be very daunting to manually construct one. Don’t worry, though: these scripts aren’t built by hand.

Programs that are built in this way have usually been packaged using a suite of programs collectively referred to as autotools. This suite includes autoconfautomake, and many other programs, all of which work together to make the life of a software maintainer significantly easier. The end user doesn’t see these tools, but they take the pain out of setting up an install process that will run consistently on many different flavours of Unix.

Hello world

Let’s take a simple “Hello world” C program, and see what it would take to package it with autotools.

Here’s the source of the program, in a file called main.c:

#include <stdio.h>

int
main(int argc, char* argv[])
{
    printf("Hello world\n");
    return 0;
}

Creating the configure script

Instead of writing the configure script by hand, we need to create a configure.ac file written in m4sh—a combination of m4 macros and POSIX shell script—to describe what the configure script needs to do.

The first m4 macro we need to call is AC_INIT, which will initialise autoconf and set up some basic information about the program we’re packaging. The program is called helloworld, the version is 0.1, and the maintainer is george@thoughtbot.com:

AC_INIT([helloworld], [0.1], [george@thoughtbot.com])

We’re going to use automake for this project, so we need to initialise that with the AM_INIT_AUTOMAKE macro:

AM_INIT_AUTOMAKE

Next, we need to tell autoconf about the dependencies our configure script needs to look for. In this case, the configure script only needs to look for a C compiler. We can set this up using the AC_PROG_CC macro:

AC_PROG_CC

If there were other dependencies, then we’d use other m4 macros here to discover them; for example the AC_PATH_PROG macro looks for a given program on the user’s PATH.

Now that we’ve listed our dependencies, we can use them. We saw earlier that a typical configure script will use the information it has about the user’s system to build a Makefile from a Makefile.in template.

The next line used the AC_CONFIG_FILES macro to tell autoconf that the configure script should do just that: it should find a file called Makefile.in, substitute placeholders like @PACKAGE_VERSION@ with values like 0.1, and write the results to Makefile.

AC_CONFIG_FILES([Makefile])

Finally, having told autoconf everything our configure script needs to do, we can call the AC_OUTPUT macro to output the script:

AC_OUTPUT

Here’s the whole thing. Not bad, compared to the 4,737 line configure script it’s going to produce!

AC_INIT([helloworld], [0.1], [george@thoughtbot.com])
AM_INIT_AUTOMAKE
AC_PROG_CC
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

We’re almost ready to package up and distribute our program, but we’re still missing something. Our configure script will expect a Makefile.in file that it can substitute all of those system-specific variables into, but so far, we’ve not created that file.

Creating the Makefile

As with the configure script, the Makefile.in template is very long and complex. So instead of writing it by hand, we write a shorter Makefile.am file, which automake will use to generated the Makefile.in for us.

First, we need to set some options to tell automake about the layout of the project. Since we’re not following the standard layout of a GNU project, we warn automake that this is a foreignproject:

AUTOMAKE_OPTIONS = foreign

Next, we tell automake that we want the Makefile to build a program called helloworld:

bin_PROGRAMS = helloworld

There’s a lot of information packed into this line, thanks to automake’s uniform naming scheme.

The PROGRAMS suffix is called a primary. It tells automake what properties the helloworldfile has. For example, PROGRAMS need to be built, whereas SCRIPTS and DATA files don’t need to be built.

The bin prefix tells automake that the file listed here should be installed to the directory defined by the variable bindir. There are various directories defined for us by autotools—including bindirlibdir, and pkglibdir—but we can also define our own.

If we wanted to install some Ruby scripts as part of our program, we could define a rubydirvariable and tell automake to install our Ruby files there:

rubydir = $(datadir)/ruby
ruby_DATA = my_script.rb my_other_script.rb

Additional prefixes can be added before the install directory to further nuance automake’s behaviour.

Since we’ve defined a PROGRAM, we need to tell automake where to find its source files. In this case, the prefix is the name of the program these source files build, rather than the place where they will be installed:

helloworld_SOURCES = main.c

Here’s the whole Makefile.am file for our helloworld program. As with theconfigure.ac and the configure script, it’s a lot shorter than the Makefile.in that it generates:

AUTOMAKE_OPTIONS = foreign
bin_PROGRAMS = helloworld
helloworld_SOURCES = main.c

Putting it all together

Now we’ve written our config files, we can run autotools and generate the finished configure script and Makefile.in template.

First, we need to generate an m4 environment for autotools to use:

aclocal

Now we can run autoconf to turn our configure.ac into a configure script, and automake to turn our Makefile.am into a Makefile.in:

autoconf
automake --add-missing

Distributing the program

The end user doesn’t need to see our autotools setup, so we can distribute the configurescript and Makefile.in without all of the files we used to generate them.

Fortunately, autotools will help us with distribution too. The Makefile contains all kinds of interesting targets, including one to build a tarball of the project containing all of the files we need to distribute:

./configure
make dist

You can even test that the distribution tarball can be installed under a variety of conditions:

make distcheck

Overview

Now we know where this incantation comes from and how it works!

On the maintainer’s system:

aclocal # Set up an m4 environment
autoconf # Generate configure from configure.ac
automake --add-missing # Generate Makefile.in from Makefile.am
./configure # Generate Makefile from Makefile.in
make distcheck # Use Makefile to build and test a tarball to distribute

On the end-user’s system:

./configure # Generate Makefile from Makefile.in
make # Use Makefile to build the program
make install # Use Makefile to install the program 


config、make、make install - 蘑菇の甜酱 - 博客园 https://www.cnblogs.com/mogujiang/p/5545462.html

.config/    .configure  (查看该目录下是否有这个文件,如果有makefile,可直接make)  配置

config是一个shell脚本,根据平台的特性生成Makefile文件,为下一步的编译做准备,

可以通过在 configure 后加上参数来对安装进行控制,比如:

./configure --prefix=/usr    (将该软件安装在 /usr 下面)

可以通过 ./configure --help 查看详细的说明帮助

 

如果有需要,会进行 make depend

(一种makefile的规则,通过扫描一个目录下的所有C\C++ 代码,从而判断出文件之间的依赖关系,如a.cc文件中调用了b.h(如以形势include<b.h>),如果之后a.cc文件被改动,那么只需要重新编译a.cc文件,不需要编译b.h文件。否则所有的文件都需要重新编译)

make  编译

从Makefile中读取指令,根据makefile制定的规则,将c\c++文件编译成*.o文件,然后进一步生成可执行文件。大多数的源代码包都经过这一步进行编译,(当然有些perl或python编写的软件需要调用perl或python来进行编译)。

如果 在make过程中出现 error ,你就要记下错误代码(注意不仅仅是最后一行),然后你可以向开发者提交 bugreport(一般在 INSTALL 里有提交地址),或者你的系统少了一些依赖库等,这些需要自己仔细研究错误代码

make test / make check

顾名思义,这一步就是对上一步 make 的检查了,要确保 make 是没有错误的,也就是这一步的 test、check要全部是 OK 的,error 为0

sudo make install  安装

这一步是用来安装的,它也从Makefile中读取指令,安装到指定的位置

这条命令来进行安装,一般需要你有 root 权限(因为要向系统写入文件),所以前面用了 sudo


流程:

在Linux下安装一个应用程序时,一般先运行脚本configure,然后用make来编译源程序,在运行make install,最后运行make clean(删除源代码(C\C++ code)生成的执行文件和所有的中间目标文件)删除一些临时文件。
这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤。

 


 

绝大数开源软件都是公布源代码的,源代码一般被打包为tar.gz归档压缩文件,然后手工编译为二进制可执行文件

./configure  检查编译环境/相关库文件/配置参数,生成makefile

make      对源代码进行编译,生成可执行文件

make install    将生成的可执行文件安装到当前计算机中

特点;

兼容性好/可控制性好/开源软件会大量使用其他开源软件的功能,要解决大量的依赖关系

 

[root@d1 ~]# make --help
用法:make [选项] [目标] ...
选项:
-b, -m 忽略兼容性。
-B, --always-make 无条件 make 所有目标。
-C DIRECTORY, --directory=DIRECTORY
在执行钱先切换到 DIRECTORY 目录。
-d 打印大量调试信息。
--debug[=FLAGS] 打印各种调试信息。
-e, --environment-overrides
环境变量覆盖 makefile 中的变量。
--eval=STRING Evaluate STRING as a makefile statement.
-f FILE, --file=FILE, --makefile=FILE
从 FILE 中读入 makefile。
-h, --help 打印该消息并退出。
-i, --ignore-errors Ignore errors from recipes.
-I DIRECTORY, --include-dir=DIRECTORY
在 DIRECTORY 中搜索被包含的 makefile。
-j [N], --jobs[=N] 同时允许 N 个任务;无参数表明允许无限个任务。
-k, --keep-going 当某些目标无法创建时仍然继续。
-l [N], --load-average[=N], --max-load[=N]
在系统负载高于 N 时不启动多任务。
-L, --check-symlink-times 使用软链接及软链接目标中修改时间较晚的一个。
-n, --just-print, --dry-run, --recon
Don't actually run any recipe; just print them.
-o FILE, --old-file=FILE, --assume-old=FILE
将 FILE 当做很旧,不必重新生成。
-p, --print-data-base 打印 make 的内部数据库。
-q, --question Run no recipe; exit status says if up to date.
-r, --no-builtin-rules 禁用内置隐含规则。
-R, --no-builtin-variables 禁用内置变量设置。
-s, --silent, --quiet Don't echo recipes.
-S, --no-keep-going, --stop
关闭 -k。
-t, --touch touch 目标而不是重新创建它们。
-v, --version 打印 make 的版本号并退出。
-w, --print-directory 打印当前目录。
--no-print-directory 关闭 -w,即使 -w 默认开启。
-W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE
将 FILE 当做最新。
--warn-undefined-variables 当引用未定义变量的时候发出警告。
--warn-undefined-functions Warn when an undefined user function is called.

该程序为 x86_64-redhat-linux-gnu 编译
报告错误到 <bug-make@gnu.org>
[root@d1 ~]#

 

 

[root@bogon src]# cd pcre-8.42/
[root@bogon pcre-8.42]# ll a-s
ls: 无法访问a-s: 没有那个文件或目录
[root@bogon pcre-8.42]# ll -as
总用量 4620
 12 drwxr-xr-x. 7 1169 1169   8192 3月  20 2018 .
  0 drwxr-xr-x. 3 root root     74 11月  7 11:54 ..
  8 -rwxr-xr-x. 1 1169 1169   7004 10月 28 2015 132html
 56 -rw-r--r--. 1 1169 1169  54600 3月  20 2018 aclocal.m4
  8 -rwxr-xr-x. 1 1169 1169   5826 3月  20 2018 ar-lib
  4 -rw-r--r--. 1 1169 1169    851 2月  21 2018 AUTHORS
292 -rw-r--r--. 1 1169 1169 296019 3月  20 2018 ChangeLog
  4 -rwxr-xr-x. 1 1169 1169   1493 1月  31 2014 CheckMan
  4 -rwxr-xr-x. 1 1169 1169   2941 1月  31 2014 CleanTxt
  0 drwxr-xr-x. 2 1169 1169    130 3月  20 2018 cmake
 36 -rw-r--r--. 1 1169 1169  34139 1月  24 2017 CMakeLists.txt
  8 -rwxr-xr-x. 1 1169 1169   7382 3月  20 2018 compile
  4 -rw-r--r--. 1 1169 1169   1560 1月  31 2014 config-cmake.h.in
 44 -rwxr-xr-x. 1 1169 1169  44259 3月  20 2018 config.guess
 16 -rw-r--r--. 1 1169 1169  14009 3月  20 2018 config.h.generic
 16 -rw-r--r--. 1 1169 1169  13470 3月  20 2018 config.h.in
 36 -rwxr-xr-x. 1 1169 1169  36515 3月  20 2018 config.sub
688 -rwxr-xr-x. 1 1169 1169 703257 3月  20 2018 configure
 44 -rw-r--r--. 1 1169 1169  41991 3月  20 2018 configure.ac
  4 -rw-r--r--. 1 1169 1169     95 1月  31 2014 COPYING
 24 -rwxr-xr-x. 1 1169 1169  23567 3月  20 2018 depcomp
  4 -rwxr-xr-x. 1 1169 1169    643 1月  31 2014 Detrail
  8 -rw-r--r--. 1 1169 1169   6972 1月  31 2014 dftables.c
  4 drwxr-xr-x. 3 1169 1169   4096 3月  20 2018 doc
 24 -rw-r--r--. 1 1169 1169  23860 1月  31 2014 HACKING
 16 -rw-r--r--. 1 1169 1169  15756 3月  20 2018 INSTALL
 16 -rwxr-xr-x. 1 1169 1169  14676 3月  20 2018 install-sh
  4 -rw-r--r--. 1 1169 1169    377 4月  24 2015 libpcre16.pc.in
  4 -rw-r--r--. 1 1169 1169    377 4月  24 2015 libpcre32.pc.in
  4 -rw-r--r--. 1 1169 1169    288 1月  31 2014 libpcrecpp.pc.in
  4 -rw-r--r--. 1 1169 1169    372 4月  24 2015 libpcre.pc.in
  4 -rw-r--r--. 1 1169 1169    330 1月  31 2014 libpcreposix.pc.in
  4 -rw-r--r--. 1 1169 1169   3182 2月  21 2018 LICENCE
324 -rw-r--r--. 1 1169 1169 331232 3月  20 2018 ltmain.sh
  0 drwxr-xr-x. 2 1169 1169    151 3月  20 2018 m4
 28 -rw-r--r--. 1 1169 1169  27296 3月   3 2016 Makefile.am
208 -rw-r--r--. 1 1169 1169 212262 3月  20 2018 Makefile.in
  4 -rw-r--r--. 1 1169 1169   2229 1月  31 2014 makevp.bat
  4 -rw-r--r--. 1 1169 1169    345 1月  31 2014 makevp_c.txt
  4 -rw-r--r--. 1 1169 1169    598 1月  31 2014 makevp_l.txt
  8 -rwxr-xr-x. 1 1169 1169   6873 3月  20 2018 missing
 32 -rw-r--r--. 1 1169 1169  29139 3月  20 2018 NEWS
 32 -rw-r--r--. 1 1169 1169  31359 2月  21 2018 NON-AUTOTOOLS-BUILD
  4 -rw-r--r--. 1 1169 1169    229 1月  31 2014 NON-UNIX-USE
  4 -rw-r--r--. 1 1169 1169   2183 1月  31 2014 pcre16_byte_order.c
  4 -rw-r--r--. 1 1169 1169   2183 1月  31 2014 pcre16_chartables.c
  4 -rw-r--r--. 1 1169 1169   2177 1月  31 2014 pcre16_compile.c
  4 -rw-r--r--. 1 1169 1169   2175 1月  31 2014 pcre16_config.c
  4 -rw-r--r--. 1 1169 1169   2179 1月  31 2014 pcre16_dfa_exec.c
  4 -rw-r--r--. 1 1169 1169   2171 1月  31 2014 pcre16_exec.c
  4 -rw-r--r--. 1 1169 1169   2179 1月  31 2014 pcre16_fullinfo.c
  4 -rw-r--r--. 1 1169 1169   2169 1月  31 2014 pcre16_get.c
  4 -rw-r--r--. 1 1169 1169   2177 1月  31 2014 pcre16_globals.c
  4 -rw-r--r--. 1 1169 1169   2185 1月  31 2014 pcre16_jit_compile.c
  4 -rw-r--r--. 1 1169 1169   2183 1月  31 2014 pcre16_maketables.c
  4 -rw-r--r--. 1 1169 1169   2177 1月  31 2014 pcre16_newline.c
  4 -rw-r--r--. 1 1169 1169   3265 1月  31 2014 pcre16_ord2utf16.c
  4 -rw-r--r--. 1 1169 1169   2179 1月  31 2014 pcre16_printint.c
  4 -rw-r--r--. 1 1169 1169   2179 1月  31 2014 pcre16_refcount.c
  4 -rw-r--r--. 1 1169 1169   2187 1月  31 2014 pcre16_string_utils.c
  4 -rw-r--r--. 1 1169 1169   2173 1月  31 2014 pcre16_study.c
  4 -rw-r--r--. 1 1169 1169   2175 1月  31 2014 pcre16_tables.c
  4 -rw-r--r--. 1 1169 1169   2169 1月  31 2014 pcre16_ucd.c
  8 -rw-r--r--. 1 1169 1169   4899 1月  31 2014 pcre16_utf16_utils.c
  8 -rw-r--r--. 1 1169 1169   4519 1月  31 2014 pcre16_valid_utf16.c
  4 -rw-r--r--. 1 1169 1169   2177 1月  31 2014 pcre16_version.c
  4 -rw-r--r--. 1 1169 1169   2175 1月  31 2014 pcre16_xclass.c
  4 -rw-r--r--. 1 1169 1169   2183 1月  31 2014 pcre32_byte_order.c
  4 -rw-r--r--. 1 1169 1169   2183 1月  31 2014 pcre32_chartables.c
  4 -rw-r--r--. 1 1169 1169   2177 1月  31 2014 pcre32_compile.c
  4 -rw-r--r--. 1 1169 1169   2175 1月  31 2014 pcre32_config.c
  4 -rw-r--r--. 1 1169 1169   2179 1月  31 2014 pcre32_dfa_exec.c
  4 -rw-r--r--. 1 1169 1169   2171 1月  31 2014 pcre32_exec.c
  4 -rw-r--r--. 1 1169 1169   2179 1月  31 2014 pcre32_fullinfo.c
  4 -rw-r--r--. 1 1169 1169   2169 1月  31 2014 pcre32_get.c
  4 -rw-r--r--. 1 1169 1169   2177 1月  31 2014 pcre32_globals.c
  4 -rw-r--r--. 1 1169 1169   2185 1月  31 2014 pcre32_jit_compile.c
  4 -rw-r--r--. 1 1169 1169   2183 1月  31 2014 pcre32_maketables.c
  4 -rw-r--r--. 1 1169 1169   2177 1月  31 2014 pcre32_newline.c
  4 -rw-r--r--. 1 1169 1169   3122 1月  31 2014 pcre32_ord2utf32.c
  4 -rw-r--r--. 1 1169 1169   2179 1月  31 2014 pcre32_printint.c
  4 -rw-r--r--. 1 1169 1169   2179 1月  31 2014 pcre32_refcount.c
  4 -rw-r--r--. 1 1169 1169   2187 1月  31 2014 pcre32_string_utils.c
  4 -rw-r--r--. 1 1169 1169   2173 1月  31 2014 pcre32_study.c
  4 -rw-r--r--. 1 1169 1169   2175 1月  31 2014 pcre32_tables.c
  4 -rw-r--r--. 1 1169 1169   2169 1月  31 2014 pcre32_ucd.c
  8 -rw-r--r--. 1 1169 1169   5084 1月  31 2014 pcre32_utf32_utils.c
  8 -rw-r--r--. 1 1169 1169   4168 1月  31 2014 pcre32_valid_utf32.c
  4 -rw-r--r--. 1 1169 1169   2177 1月  31 2014 pcre32_version.c
  4 -rw-r--r--. 1 1169 1169   2175 1月  31 2014 pcre32_xclass.c
 12 -rw-r--r--. 1 1169 1169   9231 4月   4 2014 pcre_byte_order.c
  8 -rw-r--r--. 1 1169 1169   7848 1月  31 2014 pcre_chartables.c.dist
316 -rw-r--r--. 1 1169 1169 322188 12月 12 2017 pcre_compile.c
  8 -rw-r--r--. 1 1169 1169   4983 1月  31 2014 pcre_config.c
  4 -rw-r--r--. 1 1169 1169   2470 1月  31 2014 pcre-config.in
  8 -rw-r--r--. 1 1169 1169   6865 1月  31 2014 pcrecpparg.h.in
 36 -rw-r--r--. 1 1169 1169  32958 6月  14 2016 pcrecpp.cc
 28 -rw-r--r--. 1 1169 1169  26529 1月  31 2014 pcrecpp.h
  4 -rw-r--r--. 1 1169 1169   2871 1月  31 2014 pcrecpp_internal.h
 40 -rw-r--r--. 1 1169 1169  39224 4月  22 2017 pcrecpp_unittest.cc
 16 -rw-r--r--. 1 1169 1169  15520 1月  31 2014 pcredemo.c
124 -rw-r--r--. 1 1169 1169 126768 11月 17 2017 pcre_dfa_exec.c
216 -rw-r--r--. 1 1169 1169 218251 2月  20 2018 pcre_exec.c
  8 -rw-r--r--. 1 1169 1169   7819 1月  31 2014 pcre_fullinfo.c
 24 -rw-r--r--. 1 1169 1169  22906 3月  27 2017 pcre_get.c
 28 -rw-r--r--. 1 1169 1169  26071 1月  31 2014 pcregexp.pas
  4 -rw-r--r--. 1 1169 1169   3836 2月   9 2014 pcre_globals.c
 96 -rw-r--r--. 1 1169 1169  98202 2月  25 2018 pcregrep.c
 32 -rw-r--r--. 1 1169 1169  31718 3月  20 2018 pcre.h.generic
 32 -rw-r--r--. 1 1169 1169  31757 8月  19 2017 pcre.h.in
112 -rw-r--r--. 1 1169 1169 114167 6月  14 2017 pcre_internal.h
356 -rw-r--r--. 1 1169 1169 364384 1月  11 2018 pcre_jit_compile.c
 72 -rw-r--r--. 1 1169 1169  73721 7月   2 2016 pcre_jit_test.c
  8 -rw-r--r--. 1 1169 1169   5863 1月  31 2014 pcre_maketables.c
  8 -rw-r--r--. 1 1169 1169   6164 1月  31 2014 pcre_newline.c
  4 -rw-r--r--. 1 1169 1169   3260 1月  31 2014 pcre_ord2utf8.c
 20 -rw-r--r--. 1 1169 1169  16499 2月  20 2018 pcreposix.c
  8 -rw-r--r--. 1 1169 1169   5452 1月  31 2014 pcreposix.h
 24 -rw-r--r--. 1 1169 1169  23408 1月  31 2014 pcre_printint.c
  4 -rw-r--r--. 1 1169 1169   3778 1月  31 2014 pcre_refcount.c
  8 -rw-r--r--. 1 1169 1169   5546 1月  31 2014 pcre_scanner.cc
  8 -rw-r--r--. 1 1169 1169   6600 1月  31 2014 pcre_scanner.h
  8 -rw-r--r--. 1 1169 1169   5313 4月  22 2017 pcre_scanner_unittest.cc
  4 -rw-r--r--. 1 1169 1169   1858 1月  31 2014 pcre_stringpiece.cc
  8 -rw-r--r--. 1 1169 1169   6361 4月  22 2017 pcre_stringpiece.h.in
  4 -rw-r--r--. 1 1169 1169   3624 4月  22 2017 pcre_stringpiece_unittest.cc
  8 -rw-r--r--. 1 1169 1169   5386 1月  31 2014 pcre_string_utils.c
 48 -rw-r--r--. 1 1169 1169  48586 2月  28 2016 pcre_study.c
 32 -rw-r--r--. 1 1169 1169  28774 4月  30 2017 pcre_tables.c
172 -rw-r--r--. 1 1169 1169 173880 6月  14 2017 pcretest.c
204 -rw-r--r--. 1 1169 1169 208566 2月  25 2017 pcre_ucd.c
 12 -rw-r--r--. 1 1169 1169  10207 1月  31 2014 pcre_valid_utf8.c
  8 -rw-r--r--. 1 1169 1169   4202 1月  31 2014 pcre_version.c
 12 -rw-r--r--. 1 1169 1169   8231 11月 18 2015 pcre_xclass.c
  8 -rwxr-xr-x. 1 1169 1169   6273 9月  15 2014 perltest.pl
  8 -rwxr-xr-x. 1 1169 1169   7311 1月  31 2014 PrepareRelease
 48 -rw-r--r--. 1 1169 1169  45548 2月  11 2015 README
 32 -rwxr-xr-x. 1 1169 1169  28887 5月  31 2016 RunGrepTest
 32 -rwxr-xr-x. 1 1169 1169  29654 3月   1 2016 RunTest
 20 -rw-r--r--. 1 1169 1169  17518 1月  31 2014 RunTest.bat
  4 drwxr-xr-x. 2 1169 1169   4096 3月  20 2018 sljit
  4 drwxr-xr-x. 2 1169 1169   4096 3月  20 2018 testdata
  8 -rwxr-xr-x. 1 1169 1169   4641 3月  20 2018 test-driver
  8 -rw-r--r--. 1 1169 1169   5215 9月  15 2014 ucp.h
[root@bogon pcre-8.42]# ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether make supports nested variables... (cached) yes
checking for style of include used by make... GNU
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking dependency style of gcc... gcc3
checking for ar... ar
checking the archiver (ar) interface... ar
checking for gcc... (cached) gcc
checking whether we are using the GNU C compiler... (cached) yes
checking whether gcc accepts -g... (cached) yes
checking for gcc option to accept ISO C89... (cached) none needed
checking whether gcc understands -c and -o together... (cached) yes
checking dependency style of gcc... (cached) gcc3
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking dependency style of g++... gcc3
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for int64_t... yes
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking how to print strings... printf
checking for a sed that does not truncate output... /usr/bin/sed
checking for fgrep... /usr/bin/grep -F
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking how to convert x86_64-pc-linux-gnu file names to x86_64-pc-linux-gnu format... func_convert_file_noop
checking how to convert x86_64-pc-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /usr/bin/ld option to reload object files... -r
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for dlltool... dlltool
checking how to associate runtime and link libraries... printf %s\n
checking for archiver @FILE support... @
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for sysroot... no
checking for a working dd... /usr/bin/dd
checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1
checking for mt... no
checking if : is a manifest tool... no
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... yes
checking if gcc static flag -static works... no
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
checking how to run the C++ preprocessor... g++ -E
checking for ld used by g++... /usr/bin/ld -m elf_x86_64
checking if the linker (/usr/bin/ld -m elf_x86_64) is GNU ld... yes
checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking for g++ option to produce PIC... -fPIC -DPIC
checking if g++ PIC flag -fPIC -DPIC works... yes
checking if g++ static flag -static works... no
checking if g++ supports -c -o file.o... yes
checking if g++ supports -c -o file.o... (cached) yes
checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking dynamic linker characteristics... (cached) GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether ln -s works... yes
checking whether the -Werror option is usable... yes
checking for simple visibility declarations... yes
checking for ANSI C header files... (cached) yes
checking limits.h usability... yes
checking limits.h presence... yes
checking for limits.h... yes
checking for sys/types.h... (cached) yes
checking for sys/stat.h... (cached) yes
checking dirent.h usability... yes
checking dirent.h presence... yes
checking for dirent.h... yes
checking windows.h usability... no
checking windows.h presence... no
checking for windows.h... no
checking for alias support in the linker... no
checking for alias support in the linker... no
checking string usability... yes
checking string presence... yes
checking for string... yes
checking bits/type_traits.h usability... no
checking bits/type_traits.h presence... no
checking for bits/type_traits.h... no
checking type_traits.h usability... no
checking type_traits.h presence... no
checking for type_traits.h... no
checking for strtoq... yes
checking for long long... yes
checking for unsigned long long... yes
checking for an ANSI C-conforming const... yes
checking for size_t... yes
checking for bcopy... yes
checking for memmove... yes
checking for strerror... yes
checking zlib.h usability... no
checking zlib.h presence... no
checking for zlib.h... no
checking for gzopen in -lz... no
checking bzlib.h usability... no
checking bzlib.h presence... no
checking for bzlib.h... no
checking for libbz2... no
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating libpcre.pc
config.status: creating libpcre16.pc
config.status: creating libpcre32.pc
config.status: creating libpcreposix.pc
config.status: creating libpcrecpp.pc
config.status: creating pcre-config
config.status: creating pcre.h
config.status: creating pcre_stringpiece.h
config.status: creating pcrecpparg.h
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing libtool commands
config.status: executing script-chmod commands
config.status: executing delete-old-chartables commands

pcre-8.42 configuration summary:

    Install prefix .................. : /usr/local
    C preprocessor .................. : gcc -E
    C compiler ...................... : gcc
    C++ preprocessor ................ : g++ -E
    C++ compiler .................... : g++
    Linker .......................... : /usr/bin/ld -m elf_x86_64
    C preprocessor flags ............ :
    C compiler flags ................ : -g -O2 -fvisibility=hidden
    C++ compiler flags .............. : -O2 -fvisibility=hidden -fvisibility-inlines-hidden
    Linker flags .................... :
    Extra libraries ................. :

    Build 8 bit pcre library ........ : yes
    Build 16 bit pcre library ....... : no
    Build 32 bit pcre library ....... : no
    Build C++ library ............... : yes
    Enable JIT compiling support .... : no
    Enable UTF-8/16/32 support ...... : no
    Unicode properties .............. : no
    Newline char/sequence ........... : lf
    \R matches only ANYCRLF ......... : no
    EBCDIC coding ................... : no
    EBCDIC code for NL .............. : n/a
    Rebuild char tables ............. : no
    Use stack recursion ............. : yes
    POSIX mem threshold ............. : 10
    Internal link size .............. : 2
    Nested parentheses limit ........ : 250
    Match limit ..................... : 10000000
    Match limit recursion ........... : MATCH_LIMIT
    Build shared libs ............... : yes
    Build static libs ............... : yes
    Use JIT in pcregrep ............. : no
    Buffer size for pcregrep ........ : 20480
    Link pcregrep with libz ......... : no
    Link pcregrep with libbz2 ....... : no
    Link pcretest with libedit ...... : no
    Link pcretest with libreadline .. : no
    Valgrind support ................ : no
    Code coverage ................... : no

[root@bogon pcre-8.42]# ll -ash
总用量 5.5M
 12K drwxr-xr-x. 8 1169 1169 8.0K 11月  7 11:55 .
   0 drwxr-xr-x. 3 root root   74 11月  7 11:54 ..
8.0K -rwxr-xr-x. 1 1169 1169 6.9K 10月 28 2015 132html
 56K -rw-r--r--. 1 1169 1169  54K 3月  20 2018 aclocal.m4
8.0K -rwxr-xr-x. 1 1169 1169 5.7K 3月  20 2018 ar-lib
4.0K -rw-r--r--. 1 1169 1169  851 2月  21 2018 AUTHORS
292K -rw-r--r--. 1 1169 1169 290K 3月  20 2018 ChangeLog
4.0K -rwxr-xr-x. 1 1169 1169 1.5K 1月  31 2014 CheckMan
4.0K -rwxr-xr-x. 1 1169 1169 2.9K 1月  31 2014 CleanTxt
   0 drwxr-xr-x. 2 1169 1169  130 3月  20 2018 cmake
 36K -rw-r--r--. 1 1169 1169  34K 1月  24 2017 CMakeLists.txt
8.0K -rwxr-xr-x. 1 1169 1169 7.3K 3月  20 2018 compile
4.0K -rw-r--r--. 1 1169 1169 1.6K 1月  31 2014 config-cmake.h.in
 44K -rwxr-xr-x. 1 1169 1169  44K 3月  20 2018 config.guess
 16K -rw-r--r--. 1 root root  14K 11月  7 11:55 config.h
 16K -rw-r--r--. 1 1169 1169  14K 3月  20 2018 config.h.generic
 16K -rw-r--r--. 1 1169 1169  14K 3月  20 2018 config.h.in
192K -rw-r--r--. 1 root root  73K 11月  7 11:55 config.log
 72K -rwxr-xr-x. 1 root root  70K 11月  7 11:55 config.status
 36K -rwxr-xr-x. 1 1169 1169  36K 3月  20 2018 config.sub
688K -rwxr-xr-x. 1 1169 1169 687K 3月  20 2018 configure
 44K -rw-r--r--. 1 1169 1169  42K 3月  20 2018 configure.ac
4.0K -rw-r--r--. 1 1169 1169   95 1月  31 2014 COPYING
 24K -rwxr-xr-x. 1 1169 1169  24K 3月  20 2018 depcomp
8.0K drwxr-xr-x. 2 root root 4.0K 11月  7 11:55 .deps
4.0K -rwxr-xr-x. 1 1169 1169  643 1月  31 2014 Detrail
8.0K -rw-r--r--. 1 1169 1169 6.9K 1月  31 2014 dftables.c
4.0K drwxr-xr-x. 3 1169 1169 4.0K 3月  20 2018 doc
 24K -rw-r--r--. 1 1169 1169  24K 1月  31 2014 HACKING
 16K -rw-r--r--. 1 1169 1169  16K 3月  20 2018 INSTALL
 16K -rwxr-xr-x. 1 1169 1169  15K 3月  20 2018 install-sh
4.0K -rw-r--r--. 1 root root  328 11月  7 11:55 libpcre16.pc
4.0K -rw-r--r--. 1 1169 1169  377 4月  24 2015 libpcre16.pc.in
4.0K -rw-r--r--. 1 root root  328 11月  7 11:55 libpcre32.pc
4.0K -rw-r--r--. 1 1169 1169  377 4月  24 2015 libpcre32.pc.in
4.0K -rw-r--r--. 1 root root  269 11月  7 11:55 libpcrecpp.pc
4.0K -rw-r--r--. 1 1169 1169  288 1月  31 2014 libpcrecpp.pc.in
4.0K -rw-r--r--. 1 root root  323 11月  7 11:55 libpcre.pc
4.0K -rw-r--r--. 1 1169 1169  372 4月  24 2015 libpcre.pc.in
4.0K -rw-r--r--. 1 root root  311 11月  7 11:55 libpcreposix.pc
4.0K -rw-r--r--. 1 1169 1169  330 1月  31 2014 libpcreposix.pc.in
448K -rwxr-xr-x. 1 root root 344K 11月  7 11:55 libtool
4.0K -rw-r--r--. 1 1169 1169 3.2K 2月  21 2018 LICENCE
324K -rw-r--r--. 1 1169 1169 324K 3月  20 2018 ltmain.sh
   0 drwxr-xr-x. 2 1169 1169  151 3月  20 2018 m4
184K -rw-r--r--. 1 root root 183K 11月  7 11:55 Makefile
 28K -rw-r--r--. 1 1169 1169  27K 3月   3 2016 Makefile.am
208K -rw-r--r--. 1 1169 1169 208K 3月  20 2018 Makefile.in
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 makevp.bat
4.0K -rw-r--r--. 1 1169 1169  345 1月  31 2014 makevp_c.txt
4.0K -rw-r--r--. 1 1169 1169  598 1月  31 2014 makevp_l.txt
8.0K -rwxr-xr-x. 1 1169 1169 6.8K 3月  20 2018 missing
 32K -rw-r--r--. 1 1169 1169  29K 3月  20 2018 NEWS
 32K -rw-r--r--. 1 1169 1169  31K 2月  21 2018 NON-AUTOTOOLS-BUILD
4.0K -rw-r--r--. 1 1169 1169  229 1月  31 2014 NON-UNIX-USE
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_byte_order.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_chartables.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_compile.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_config.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_dfa_exec.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_exec.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_fullinfo.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_get.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_globals.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_jit_compile.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_maketables.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_newline.c
4.0K -rw-r--r--. 1 1169 1169 3.2K 1月  31 2014 pcre16_ord2utf16.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_printint.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_refcount.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_string_utils.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_study.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_tables.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_ucd.c
8.0K -rw-r--r--. 1 1169 1169 4.8K 1月  31 2014 pcre16_utf16_utils.c
8.0K -rw-r--r--. 1 1169 1169 4.5K 1月  31 2014 pcre16_valid_utf16.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_version.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_xclass.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_byte_order.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_chartables.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_compile.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_config.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_dfa_exec.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_exec.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_fullinfo.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_get.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_globals.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_jit_compile.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_maketables.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_newline.c
4.0K -rw-r--r--. 1 1169 1169 3.1K 1月  31 2014 pcre32_ord2utf32.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_printint.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_refcount.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_string_utils.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_study.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_tables.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_ucd.c
8.0K -rw-r--r--. 1 1169 1169 5.0K 1月  31 2014 pcre32_utf32_utils.c
8.0K -rw-r--r--. 1 1169 1169 4.1K 1月  31 2014 pcre32_valid_utf32.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_version.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_xclass.c
 12K -rw-r--r--. 1 1169 1169 9.1K 4月   4 2014 pcre_byte_order.c
8.0K -rw-r--r--. 1 1169 1169 7.7K 1月  31 2014 pcre_chartables.c.dist
316K -rw-r--r--. 1 1169 1169 315K 12月 12 2017 pcre_compile.c
4.0K -rwxr-xr-x. 1 root root 2.4K 11月  7 11:55 pcre-config
8.0K -rw-r--r--. 1 1169 1169 4.9K 1月  31 2014 pcre_config.c
4.0K -rw-r--r--. 1 1169 1169 2.5K 1月  31 2014 pcre-config.in
8.0K -rw-r--r--. 1 root root 6.7K 11月  7 11:55 pcrecpparg.h
8.0K -rw-r--r--. 1 1169 1169 6.8K 1月  31 2014 pcrecpparg.h.in
 36K -rw-r--r--. 1 1169 1169  33K 6月  14 2016 pcrecpp.cc
 28K -rw-r--r--. 1 1169 1169  26K 1月  31 2014 pcrecpp.h
4.0K -rw-r--r--. 1 1169 1169 2.9K 1月  31 2014 pcrecpp_internal.h
 40K -rw-r--r--. 1 1169 1169  39K 4月  22 2017 pcrecpp_unittest.cc
 16K -rw-r--r--. 1 1169 1169  16K 1月  31 2014 pcredemo.c
124K -rw-r--r--. 1 1169 1169 124K 11月 17 2017 pcre_dfa_exec.c
216K -rw-r--r--. 1 1169 1169 214K 2月  20 2018 pcre_exec.c
8.0K -rw-r--r--. 1 1169 1169 7.7K 1月  31 2014 pcre_fullinfo.c
 24K -rw-r--r--. 1 1169 1169  23K 3月  27 2017 pcre_get.c
 28K -rw-r--r--. 1 1169 1169  26K 1月  31 2014 pcregexp.pas
4.0K -rw-r--r--. 1 1169 1169 3.8K 2月   9 2014 pcre_globals.c
 96K -rw-r--r--. 1 1169 1169  96K 2月  25 2018 pcregrep.c
 32K -rw-r--r--. 1 root root  31K 11月  7 11:55 pcre.h
 32K -rw-r--r--. 1 1169 1169  31K 3月  20 2018 pcre.h.generic
 32K -rw-r--r--. 1 1169 1169  32K 8月  19 2017 pcre.h.in
112K -rw-r--r--. 1 1169 1169 112K 6月  14 2017 pcre_internal.h
356K -rw-r--r--. 1 1169 1169 356K 1月  11 2018 pcre_jit_compile.c
 72K -rw-r--r--. 1 1169 1169  72K 7月   2 2016 pcre_jit_test.c
8.0K -rw-r--r--. 1 1169 1169 5.8K 1月  31 2014 pcre_maketables.c
8.0K -rw-r--r--. 1 1169 1169 6.1K 1月  31 2014 pcre_newline.c
4.0K -rw-r--r--. 1 1169 1169 3.2K 1月  31 2014 pcre_ord2utf8.c
 20K -rw-r--r--. 1 1169 1169  17K 2月  20 2018 pcreposix.c
8.0K -rw-r--r--. 1 1169 1169 5.4K 1月  31 2014 pcreposix.h
 24K -rw-r--r--. 1 1169 1169  23K 1月  31 2014 pcre_printint.c
4.0K -rw-r--r--. 1 1169 1169 3.7K 1月  31 2014 pcre_refcount.c
8.0K -rw-r--r--. 1 1169 1169 5.5K 1月  31 2014 pcre_scanner.cc
8.0K -rw-r--r--. 1 1169 1169 6.5K 1月  31 2014 pcre_scanner.h
8.0K -rw-r--r--. 1 1169 1169 5.2K 4月  22 2017 pcre_scanner_unittest.cc
4.0K -rw-r--r--. 1 1169 1169 1.9K 1月  31 2014 pcre_stringpiece.cc
8.0K -rw-r--r--. 1 root root 6.2K 11月  7 11:55 pcre_stringpiece.h
8.0K -rw-r--r--. 1 1169 1169 6.3K 4月  22 2017 pcre_stringpiece.h.in
4.0K -rw-r--r--. 1 1169 1169 3.6K 4月  22 2017 pcre_stringpiece_unittest.cc
8.0K -rw-r--r--. 1 1169 1169 5.3K 1月  31 2014 pcre_string_utils.c
 48K -rw-r--r--. 1 1169 1169  48K 2月  28 2016 pcre_study.c
 32K -rw-r--r--. 1 1169 1169  29K 4月  30 2017 pcre_tables.c
172K -rw-r--r--. 1 1169 1169 170K 6月  14 2017 pcretest.c
204K -rw-r--r--. 1 1169 1169 204K 2月  25 2017 pcre_ucd.c
 12K -rw-r--r--. 1 1169 1169  10K 1月  31 2014 pcre_valid_utf8.c
8.0K -rw-r--r--. 1 1169 1169 4.2K 1月  31 2014 pcre_version.c
 12K -rw-r--r--. 1 1169 1169 8.1K 11月 18 2015 pcre_xclass.c
8.0K -rwxr-xr-x. 1 1169 1169 6.2K 9月  15 2014 perltest.pl
8.0K -rwxr-xr-x. 1 1169 1169 7.2K 1月  31 2014 PrepareRelease
 48K -rw-r--r--. 1 1169 1169  45K 2月  11 2015 README
 32K -rwxr-xr-x. 1 1169 1169  29K 5月  31 2016 RunGrepTest
 32K -rwxr-xr-x. 1 1169 1169  29K 3月   1 2016 RunTest
 20K -rw-r--r--. 1 1169 1169  18K 1月  31 2014 RunTest.bat
4.0K drwxr-xr-x. 2 1169 1169 4.0K 3月  20 2018 sljit
4.0K -rw-r--r--. 1 root root   23 11月  7 11:55 stamp-h1
4.0K drwxr-xr-x. 2 1169 1169 4.0K 3月  20 2018 testdata
8.0K -rwxr-xr-x. 1 1169 1169 4.6K 3月  20 2018 test-driver
8.0K -rw-r--r--. 1 1169 1169 5.1K 9月  15 2014 ucp.h
[root@bogon pcre-8.42]# make
rm -f pcre_chartables.c
ln -s ./pcre_chartables.c.dist pcre_chartables.c
make  all-am
make[1]: 进入目录“/usr/local/src/pcre-8.42”
  CC       libpcre_la-pcre_byte_order.lo
  CC       libpcre_la-pcre_compile.lo
  CC       libpcre_la-pcre_config.lo
  CC       libpcre_la-pcre_dfa_exec.lo
  CC       libpcre_la-pcre_exec.lo
  CC       libpcre_la-pcre_fullinfo.lo
  CC       libpcre_la-pcre_get.lo
  CC       libpcre_la-pcre_globals.lo
  CC       libpcre_la-pcre_jit_compile.lo
  CC       libpcre_la-pcre_maketables.lo
  CC       libpcre_la-pcre_newline.lo
  CC       libpcre_la-pcre_ord2utf8.lo
  CC       libpcre_la-pcre_refcount.lo
  CC       libpcre_la-pcre_string_utils.lo
  CC       libpcre_la-pcre_study.lo
  CC       libpcre_la-pcre_tables.lo
  CC       libpcre_la-pcre_ucd.lo
  CC       libpcre_la-pcre_valid_utf8.lo
  CC       libpcre_la-pcre_version.lo
  CC       libpcre_la-pcre_xclass.lo
  CC       libpcre_la-pcre_chartables.lo
  CCLD     libpcre.la
  CC       libpcreposix_la-pcreposix.lo
  CCLD     libpcreposix.la
  CXX      libpcrecpp_la-pcrecpp.lo
  CXX      libpcrecpp_la-pcre_scanner.lo
  CXX      libpcrecpp_la-pcre_stringpiece.lo
  CXXLD    libpcrecpp.la
  CC       pcretest-pcretest.o
  CC       pcretest-pcre_printint.o
  CCLD     pcretest
  CC       pcregrep-pcregrep.o
  CCLD     pcregrep
  CXX      pcrecpp_unittest-pcrecpp_unittest.o
  CXXLD    pcrecpp_unittest
  CXX      pcre_scanner_unittest-pcre_scanner_unittest.o
  CXXLD    pcre_scanner_unittest
  CXX      pcre_stringpiece_unittest-pcre_stringpiece_unittest.o
  CXXLD    pcre_stringpiece_unittest
make[1]: 离开目录“/usr/local/src/pcre-8.42”
[root@bogon pcre-8.42]# make install
make  install-am
make[1]: 进入目录“/usr/local/src/pcre-8.42”
make[2]: 进入目录“/usr/local/src/pcre-8.42”
 /usr/bin/mkdir -p '/usr/local/lib'
 /bin/sh ./libtool   --mode=install /usr/bin/install -c   libpcre.la libpcreposix.la libpcrecpp.la '/usr/local/lib'
libtool: install: /usr/bin/install -c .libs/libpcre.so.1.2.10 /usr/local/lib/libpcre.so.1.2.10
libtool: install: (cd /usr/local/lib && { ln -s -f libpcre.so.1.2.10 libpcre.so.1 || { rm -f libpcre.so.1 && ln -s libpcre.s                                                                                                          o.1.2.10 libpcre.so.1; }; })
libtool: install: (cd /usr/local/lib && { ln -s -f libpcre.so.1.2.10 libpcre.so || { rm -f libpcre.so && ln -s libpcre.so.1.                                                                                                          2.10 libpcre.so; }; })
libtool: install: /usr/bin/install -c .libs/libpcre.lai /usr/local/lib/libpcre.la
libtool: warning: relinking 'libpcreposix.la'
libtool: install: (cd /usr/local/src/pcre-8.42; /bin/sh "/usr/local/src/pcre-8.42/libtool"  --silent --tag CC --mode=relink                                                                                                           gcc -fvisibility=hidden -g -O2 -version-info 0:6:0 -o libpcreposix.la -rpath /usr/local/lib libpcreposix_la-pcreposix.lo lib                                                                                                          pcre.la )
libtool: install: /usr/bin/install -c .libs/libpcreposix.so.0.0.6T /usr/local/lib/libpcreposix.so.0.0.6
libtool: install: (cd /usr/local/lib && { ln -s -f libpcreposix.so.0.0.6 libpcreposix.so.0 || { rm -f libpcreposix.so.0 && l                                                                                                          n -s libpcreposix.so.0.0.6 libpcreposix.so.0; }; })
libtool: install: (cd /usr/local/lib && { ln -s -f libpcreposix.so.0.0.6 libpcreposix.so || { rm -f libpcreposix.so && ln -s                                                                                                           libpcreposix.so.0.0.6 libpcreposix.so; }; })
libtool: install: /usr/bin/install -c .libs/libpcreposix.lai /usr/local/lib/libpcreposix.la
libtool: warning: relinking 'libpcrecpp.la'
libtool: install: (cd /usr/local/src/pcre-8.42; /bin/sh "/usr/local/src/pcre-8.42/libtool"  --silent --tag CXX --mode=relink                                                                                                           g++ -fvisibility=hidden -fvisibility-inlines-hidden -O2 -version-info 0:1:0 -o libpcrecpp.la -rpath /usr/local/lib libpcrec                                                                                                          pp_la-pcrecpp.lo libpcrecpp_la-pcre_scanner.lo libpcrecpp_la-pcre_stringpiece.lo libpcre.la )
libtool: install: /usr/bin/install -c .libs/libpcrecpp.so.0.0.1T /usr/local/lib/libpcrecpp.so.0.0.1
libtool: install: (cd /usr/local/lib && { ln -s -f libpcrecpp.so.0.0.1 libpcrecpp.so.0 || { rm -f libpcrecpp.so.0 && ln -s l                                                                                                          ibpcrecpp.so.0.0.1 libpcrecpp.so.0; }; })
libtool: install: (cd /usr/local/lib && { ln -s -f libpcrecpp.so.0.0.1 libpcrecpp.so || { rm -f libpcrecpp.so && ln -s libpc                                                                                                          recpp.so.0.0.1 libpcrecpp.so; }; })
libtool: install: /usr/bin/install -c .libs/libpcrecpp.lai /usr/local/lib/libpcrecpp.la
libtool: install: /usr/bin/install -c .libs/libpcre.a /usr/local/lib/libpcre.a
libtool: install: chmod 644 /usr/local/lib/libpcre.a
libtool: install: ranlib /usr/local/lib/libpcre.a
libtool: install: /usr/bin/install -c .libs/libpcreposix.a /usr/local/lib/libpcreposix.a
libtool: install: chmod 644 /usr/local/lib/libpcreposix.a
libtool: install: ranlib /usr/local/lib/libpcreposix.a
libtool: install: /usr/bin/install -c .libs/libpcrecpp.a /usr/local/lib/libpcrecpp.a
libtool: install: chmod 644 /usr/local/lib/libpcrecpp.a
libtool: install: ranlib /usr/local/lib/libpcrecpp.a
libtool: finish: PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/sbin" ldconfig -n /usr/local/lib
----------------------------------------------------------------------
Libraries have been installed in:
   /usr/local/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the 'LD_RUN_PATH' environment variable
     during linking
   - use the '-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to '/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
 /usr/bin/mkdir -p '/usr/local/bin'
  /bin/sh ./libtool   --mode=install /usr/bin/install -c pcretest pcregrep '/usr/local/bin'
libtool: install: /usr/bin/install -c .libs/pcretest /usr/local/bin/pcretest
libtool: install: /usr/bin/install -c .libs/pcregrep /usr/local/bin/pcregrep
 /usr/bin/mkdir -p '/usr/local/bin'
 /usr/bin/install -c pcre-config '/usr/local/bin'
 /usr/bin/mkdir -p '/usr/local/share/doc/pcre'
 /usr/bin/install -c -m 644 doc/pcre.txt doc/pcre-config.txt doc/pcregrep.txt doc/pcretest.txt AUTHORS COPYING ChangeLog LIC                                                                                                          ENCE NEWS README '/usr/local/share/doc/pcre'
 /usr/bin/mkdir -p '/usr/local/share/doc/pcre/html'
 /usr/bin/install -c -m 644 doc/html/NON-AUTOTOOLS-BUILD.txt doc/html/README.txt doc/html/index.html doc/html/pcre-config.ht                                                                                                          ml doc/html/pcre.html doc/html/pcre16.html doc/html/pcre32.html doc/html/pcre_assign_jit_stack.html doc/html/pcre_compile.ht                                                                                                          ml doc/html/pcre_compile2.html doc/html/pcre_config.html doc/html/pcre_copy_named_substring.html doc/html/pcre_copy_substrin                                                                                                          g.html doc/html/pcre_dfa_exec.html doc/html/pcre_exec.html doc/html/pcre_free_study.html doc/html/pcre_free_substring.html d                                                                                                          oc/html/pcre_free_substring_list.html doc/html/pcre_fullinfo.html doc/html/pcre_get_named_substring.html doc/html/pcre_get_s                                                                                                          tringnumber.html doc/html/pcre_get_stringtable_entries.html doc/html/pcre_get_substring.html doc/html/pcre_get_substring_lis                                                                                                          t.html doc/html/pcre_jit_exec.html doc/html/pcre_jit_stack_alloc.html doc/html/pcre_jit_stack_free.html doc/html/pcre_maketa                                                                                                          bles.html doc/html/pcre_pattern_to_host_byte_order.html doc/html/pcre_refcount.html doc/html/pcre_study.html doc/html/pcre_u                                                                                                          tf16_to_host_byte_order.html doc/html/pcre_utf32_to_host_byte_order.html doc/html/pcre_version.html doc/html/pcreapi.html do                                                                                                          c/html/pcrebuild.html doc/html/pcrecallout.html doc/html/pcrecompat.html doc/html/pcredemo.html doc/html/pcregrep.html '/usr                                                                                                          /local/share/doc/pcre/html'
 /usr/bin/install -c -m 644 doc/html/pcrejit.html doc/html/pcrelimits.html doc/html/pcrematching.html doc/html/pcrepartial.h                                                                                                          tml doc/html/pcrepattern.html doc/html/pcreperform.html doc/html/pcreposix.html doc/html/pcreprecompile.html doc/html/pcresa                                                                                                          mple.html doc/html/pcrestack.html doc/html/pcresyntax.html doc/html/pcretest.html doc/html/pcreunicode.html '/usr/local/shar                                                                                                          e/doc/pcre/html'
 /usr/bin/mkdir -p '/usr/local/share/doc/pcre/html'
 /usr/bin/install -c -m 644 doc/html/pcrecpp.html '/usr/local/share/doc/pcre/html'
 /usr/bin/mkdir -p '/usr/local/include'
 /usr/bin/install -c -m 644 pcreposix.h pcrecpp.h pcre_scanner.h '/usr/local/include'
 /usr/bin/mkdir -p '/usr/local/share/man/man1'
 /usr/bin/install -c -m 644 doc/pcre-config.1 doc/pcregrep.1 doc/pcretest.1 '/usr/local/share/man/man1'
 /usr/bin/mkdir -p '/usr/local/share/man/man3'
 /usr/bin/install -c -m 644 doc/pcre.3 doc/pcre16.3 doc/pcre32.3 doc/pcre_assign_jit_stack.3 doc/pcre_compile.3 doc/pcre_com                                                                                                          pile2.3 doc/pcre_config.3 doc/pcre_copy_named_substring.3 doc/pcre_copy_substring.3 doc/pcre_dfa_exec.3 doc/pcre_exec.3 doc/                                                                                                          pcre_free_study.3 doc/pcre_free_substring.3 doc/pcre_free_substring_list.3 doc/pcre_fullinfo.3 doc/pcre_get_named_substring.                                                                                                          3 doc/pcre_get_stringnumber.3 doc/pcre_get_stringtable_entries.3 doc/pcre_get_substring.3 doc/pcre_get_substring_list.3 doc/                                                                                                          pcre_jit_exec.3 doc/pcre_jit_stack_alloc.3 doc/pcre_jit_stack_free.3 doc/pcre_maketables.3 doc/pcre_pattern_to_host_byte_ord                                                                                                          er.3 doc/pcre_refcount.3 doc/pcre_study.3 doc/pcre_utf16_to_host_byte_order.3 doc/pcre_utf32_to_host_byte_order.3 doc/pcre_v                                                                                                          ersion.3 doc/pcreapi.3 doc/pcrebuild.3 doc/pcrecallout.3 doc/pcrecompat.3 doc/pcredemo.3 doc/pcrejit.3 doc/pcrelimits.3 doc/                                                                                                          pcrematching.3 doc/pcrepartial.3 doc/pcrepattern.3 '/usr/local/share/man/man3'
 /usr/bin/install -c -m 644 doc/pcreperform.3 doc/pcreposix.3 doc/pcreprecompile.3 doc/pcresample.3 doc/pcrestack.3 doc/pcre                                                                                                          syntax.3 doc/pcreunicode.3 doc/pcrecpp.3 '/usr/local/share/man/man3'
 /usr/bin/mkdir -p '/usr/local/include'
 /usr/bin/install -c -m 644 pcre.h pcrecpparg.h pcre_stringpiece.h '/usr/local/include'
 /usr/bin/mkdir -p '/usr/local/lib/pkgconfig'
 /usr/bin/install -c -m 644 libpcre.pc libpcreposix.pc libpcrecpp.pc '/usr/local/lib/pkgconfig'
make  install-data-hook
make[3]: 进入目录“/usr/local/src/pcre-8.42”
ln -sf pcre_assign_jit_stack.3           /usr/local/share/man/man3/pcre16_assign_jit_stack.3
ln -sf pcre_compile.3                    /usr/local/share/man/man3/pcre16_compile.3
ln -sf pcre_compile2.3                   /usr/local/share/man/man3/pcre16_compile2.3
ln -sf pcre_config.3                     /usr/local/share/man/man3/pcre16_config.3
ln -sf pcre_copy_named_substring.3       /usr/local/share/man/man3/pcre16_copy_named_substring.3
ln -sf pcre_copy_substring.3             /usr/local/share/man/man3/pcre16_copy_substring.3
ln -sf pcre_dfa_exec.3                   /usr/local/share/man/man3/pcre16_dfa_exec.3
ln -sf pcre_exec.3                       /usr/local/share/man/man3/pcre16_exec.3
ln -sf pcre_free_study.3                 /usr/local/share/man/man3/pcre16_free_study.3
ln -sf pcre_free_substring.3             /usr/local/share/man/man3/pcre16_free_substring.3
ln -sf pcre_free_substring_list.3        /usr/local/share/man/man3/pcre16_free_substring_list.3
ln -sf pcre_fullinfo.3                   /usr/local/share/man/man3/pcre16_fullinfo.3
ln -sf pcre_get_named_substring.3        /usr/local/share/man/man3/pcre16_get_named_substring.3
ln -sf pcre_get_stringnumber.3           /usr/local/share/man/man3/pcre16_get_stringnumber.3
ln -sf pcre_get_stringtable_entries.3    /usr/local/share/man/man3/pcre16_get_stringtable_entries.3
ln -sf pcre_get_substring.3              /usr/local/share/man/man3/pcre16_get_substring.3
ln -sf pcre_get_substring_list.3         /usr/local/share/man/man3/pcre16_get_substring_list.3
ln -sf pcre_jit_exec.3                   /usr/local/share/man/man3/pcre16_jit_exec.3
ln -sf pcre_jit_stack_alloc.3            /usr/local/share/man/man3/pcre16_jit_stack_alloc.3
ln -sf pcre_jit_stack_free.3             /usr/local/share/man/man3/pcre16_jit_stack_free.3
ln -sf pcre_maketables.3                 /usr/local/share/man/man3/pcre16_maketables.3
ln -sf pcre_pattern_to_host_byte_order.3 /usr/local/share/man/man3/pcre16_pattern_to_host_byte_order.3
ln -sf pcre_refcount.3                   /usr/local/share/man/man3/pcre16_refcount.3
ln -sf pcre_study.3                      /usr/local/share/man/man3/pcre16_study.3
ln -sf pcre_utf16_to_host_byte_order.3   /usr/local/share/man/man3/pcre16_utf16_to_host_byte_order.3
ln -sf pcre_version.3                    /usr/local/share/man/man3/pcre16_version.3
ln -sf pcre_assign_jit_stack.3           /usr/local/share/man/man3/pcre32_assign_jit_stack.3
ln -sf pcre_compile.3                    /usr/local/share/man/man3/pcre32_compile.3
ln -sf pcre_compile2.3                   /usr/local/share/man/man3/pcre32_compile2.3
ln -sf pcre_config.3                     /usr/local/share/man/man3/pcre32_config.3
ln -sf pcre_copy_named_substring.3       /usr/local/share/man/man3/pcre32_copy_named_substring.3
ln -sf pcre_copy_substring.3             /usr/local/share/man/man3/pcre32_copy_substring.3
ln -sf pcre_dfa_exec.3                   /usr/local/share/man/man3/pcre32_dfa_exec.3
ln -sf pcre_exec.3                       /usr/local/share/man/man3/pcre32_exec.3
ln -sf pcre_free_study.3                 /usr/local/share/man/man3/pcre32_free_study.3
ln -sf pcre_free_substring.3             /usr/local/share/man/man3/pcre32_free_substring.3
ln -sf pcre_free_substring_list.3        /usr/local/share/man/man3/pcre32_free_substring_list.3
ln -sf pcre_fullinfo.3                   /usr/local/share/man/man3/pcre32_fullinfo.3
ln -sf pcre_get_named_substring.3        /usr/local/share/man/man3/pcre32_get_named_substring.3
ln -sf pcre_get_stringnumber.3           /usr/local/share/man/man3/pcre32_get_stringnumber.3
ln -sf pcre_get_stringtable_entries.3    /usr/local/share/man/man3/pcre32_get_stringtable_entries.3
ln -sf pcre_get_substring.3              /usr/local/share/man/man3/pcre32_get_substring.3
ln -sf pcre_get_substring_list.3         /usr/local/share/man/man3/pcre32_get_substring_list.3
ln -sf pcre_jit_exec.3                   /usr/local/share/man/man3/pcre32_jit_exec.3
ln -sf pcre_jit_stack_alloc.3            /usr/local/share/man/man3/pcre32_jit_stack_alloc.3
ln -sf pcre_jit_stack_free.3             /usr/local/share/man/man3/pcre32_jit_stack_free.3
ln -sf pcre_maketables.3                 /usr/local/share/man/man3/pcre32_maketables.3
ln -sf pcre_pattern_to_host_byte_order.3 /usr/local/share/man/man3/pcre32_pattern_to_host_byte_order.3
ln -sf pcre_refcount.3                   /usr/local/share/man/man3/pcre32_refcount.3
ln -sf pcre_study.3                      /usr/local/share/man/man3/pcre32_study.3
ln -sf pcre_utf32_to_host_byte_order.3   /usr/local/share/man/man3/pcre32_utf32_to_host_byte_order.3
ln -sf pcre_version.3                    /usr/local/share/man/man3/pcre32_version.3
make[3]: 离开目录“/usr/local/src/pcre-8.42”
make[2]: 离开目录“/usr/local/src/pcre-8.42”
make[1]: 离开目录“/usr/local/src/pcre-8.42”
[root@bogon pcre-8.42]# ll -ash
总用量 7.6M
 16K drwxr-xr-x. 9 1169 1169  12K 11月  7 11:55 .
   0 drwxr-xr-x. 3 root root   74 11月  7 11:54 ..
8.0K -rwxr-xr-x. 1 1169 1169 6.9K 10月 28 2015 132html
 56K -rw-r--r--. 1 1169 1169  54K 3月  20 2018 aclocal.m4
8.0K -rwxr-xr-x. 1 1169 1169 5.7K 3月  20 2018 ar-lib
4.0K -rw-r--r--. 1 1169 1169  851 2月  21 2018 AUTHORS
292K -rw-r--r--. 1 1169 1169 290K 3月  20 2018 ChangeLog
4.0K -rwxr-xr-x. 1 1169 1169 1.5K 1月  31 2014 CheckMan
4.0K -rwxr-xr-x. 1 1169 1169 2.9K 1月  31 2014 CleanTxt
   0 drwxr-xr-x. 2 1169 1169  130 3月  20 2018 cmake
 36K -rw-r--r--. 1 1169 1169  34K 1月  24 2017 CMakeLists.txt
8.0K -rwxr-xr-x. 1 1169 1169 7.3K 3月  20 2018 compile
4.0K -rw-r--r--. 1 1169 1169 1.6K 1月  31 2014 config-cmake.h.in
 44K -rwxr-xr-x. 1 1169 1169  44K 3月  20 2018 config.guess
 16K -rw-r--r--. 1 root root  14K 11月  7 11:55 config.h
 16K -rw-r--r--. 1 1169 1169  14K 3月  20 2018 config.h.generic
 16K -rw-r--r--. 1 1169 1169  14K 3月  20 2018 config.h.in
192K -rw-r--r--. 1 root root  73K 11月  7 11:55 config.log
 72K -rwxr-xr-x. 1 root root  70K 11月  7 11:55 config.status
 36K -rwxr-xr-x. 1 1169 1169  36K 3月  20 2018 config.sub
688K -rwxr-xr-x. 1 1169 1169 687K 3月  20 2018 configure
 44K -rw-r--r--. 1 1169 1169  42K 3月  20 2018 configure.ac
4.0K -rw-r--r--. 1 1169 1169   95 1月  31 2014 COPYING
 24K -rwxr-xr-x. 1 1169 1169  24K 3月  20 2018 depcomp
8.0K drwxr-xr-x. 2 root root 4.0K 11月  7 11:55 .deps
4.0K -rwxr-xr-x. 1 1169 1169  643 1月  31 2014 Detrail
8.0K -rw-r--r--. 1 1169 1169 6.9K 1月  31 2014 dftables.c
4.0K drwxr-xr-x. 3 1169 1169 4.0K 3月  20 2018 doc
 24K -rw-r--r--. 1 1169 1169  24K 1月  31 2014 HACKING
 16K -rw-r--r--. 1 1169 1169  16K 3月  20 2018 INSTALL
 16K -rwxr-xr-x. 1 1169 1169  15K 3月  20 2018 install-sh
4.0K -rw-r--r--. 1 root root  328 11月  7 11:55 libpcre16.pc
4.0K -rw-r--r--. 1 1169 1169  377 4月  24 2015 libpcre16.pc.in
4.0K -rw-r--r--. 1 root root  328 11月  7 11:55 libpcre32.pc
4.0K -rw-r--r--. 1 1169 1169  377 4月  24 2015 libpcre32.pc.in
4.0K -rw-r--r--. 1 root root 1.4K 11月  7 11:55 libpcrecpp.la
4.0K -rw-r--r--. 1 root root  329 11月  7 11:55 libpcrecpp_la-pcrecpp.lo
 32K -rw-r--r--. 1 root root  29K 11月  7 11:55 libpcrecpp_la-pcrecpp.o
4.0K -rw-r--r--. 1 root root  344 11月  7 11:55 libpcrecpp_la-pcre_scanner.lo
 12K -rw-r--r--. 1 root root 9.7K 11月  7 11:55 libpcrecpp_la-pcre_scanner.o
4.0K -rw-r--r--. 1 root root  356 11月  7 11:55 libpcrecpp_la-pcre_stringpiece.lo
4.0K -rw-r--r--. 1 root root 3.2K 11月  7 11:55 libpcrecpp_la-pcre_stringpiece.o
4.0K -rw-r--r--. 1 root root  269 11月  7 11:55 libpcrecpp.pc
4.0K -rw-r--r--. 1 1169 1169  288 1月  31 2014 libpcrecpp.pc.in
4.0K -rw-r--r--. 1 root root  931 11月  7 11:55 libpcre.la
4.0K -rw-r--r--. 1 root root  344 11月  7 11:55 libpcre_la-pcre_byte_order.lo
 12K -rw-r--r--. 1 root root 8.8K 11月  7 11:55 libpcre_la-pcre_byte_order.o
4.0K -rw-r--r--. 1 root root  344 11月  7 11:55 libpcre_la-pcre_chartables.lo
8.0K -rw-r--r--. 1 root root 6.0K 11月  7 11:55 libpcre_la-pcre_chartables.o
4.0K -rw-r--r--. 1 root root  335 11月  7 11:55 libpcre_la-pcre_compile.lo
416K -rw-r--r--. 1 root root 416K 11月  7 11:55 libpcre_la-pcre_compile.o
4.0K -rw-r--r--. 1 root root  332 11月  7 11:55 libpcre_la-pcre_config.lo
8.0K -rw-r--r--. 1 root root 6.4K 11月  7 11:55 libpcre_la-pcre_config.o
4.0K -rw-r--r--. 1 root root  338 11月  7 11:55 libpcre_la-pcre_dfa_exec.lo
136K -rw-r--r--. 1 root root 134K 11月  7 11:55 libpcre_la-pcre_dfa_exec.o
4.0K -rw-r--r--. 1 root root  326 11月  7 11:55 libpcre_la-pcre_exec.lo
124K -rw-r--r--. 1 root root 121K 11月  7 11:55 libpcre_la-pcre_exec.o
4.0K -rw-r--r--. 1 root root  338 11月  7 11:55 libpcre_la-pcre_fullinfo.lo
 12K -rw-r--r--. 1 root root  11K 11月  7 11:55 libpcre_la-pcre_fullinfo.o
4.0K -rw-r--r--. 1 root root  323 11月  7 11:55 libpcre_la-pcre_get.lo
 28K -rw-r--r--. 1 root root  26K 11月  7 11:55 libpcre_la-pcre_get.o
4.0K -rw-r--r--. 1 root root  335 11月  7 11:55 libpcre_la-pcre_globals.lo
8.0K -rw-r--r--. 1 root root 6.5K 11月  7 11:55 libpcre_la-pcre_globals.o
4.0K -rw-r--r--. 1 root root  347 11月  7 11:55 libpcre_la-pcre_jit_compile.lo
8.0K -rw-r--r--. 1 root root 6.9K 11月  7 11:55 libpcre_la-pcre_jit_compile.o
4.0K -rw-r--r--. 1 root root  344 11月  7 11:55 libpcre_la-pcre_maketables.lo
 12K -rw-r--r--. 1 root root  11K 11月  7 11:55 libpcre_la-pcre_maketables.o
4.0K -rw-r--r--. 1 root root  335 11月  7 11:55 libpcre_la-pcre_newline.lo
8.0K -rw-r--r--. 1 root root 7.0K 11月  7 11:55 libpcre_la-pcre_newline.o
4.0K -rw-r--r--. 1 root root  338 11月  7 11:55 libpcre_la-pcre_ord2utf8.lo
8.0K -rw-r--r--. 1 root root 5.4K 11月  7 11:55 libpcre_la-pcre_ord2utf8.o
4.0K -rw-r--r--. 1 root root  338 11月  7 11:55 libpcre_la-pcre_refcount.lo
8.0K -rw-r--r--. 1 root root 6.7K 11月  7 11:55 libpcre_la-pcre_refcount.o
4.0K -rw-r--r--. 1 root root  350 11月  7 11:55 libpcre_la-pcre_string_utils.lo
8.0K -rw-r--r--. 1 root root 4.6K 11月  7 11:55 libpcre_la-pcre_string_utils.o
4.0K -rw-r--r--. 1 root root  329 11月  7 11:55 libpcre_la-pcre_study.lo
 52K -rw-r--r--. 1 root root  51K 11月  7 11:55 libpcre_la-pcre_study.o
4.0K -rw-r--r--. 1 root root  332 11月  7 11:55 libpcre_la-pcre_tables.lo
8.0K -rw-r--r--. 1 root root 5.5K 11月  7 11:55 libpcre_la-pcre_tables.o
4.0K -rw-r--r--. 1 root root  323 11月  7 11:55 libpcre_la-pcre_ucd.lo
8.0K -rw-r--r--. 1 root root 5.8K 11月  7 11:55 libpcre_la-pcre_ucd.o
4.0K -rw-r--r--. 1 root root  344 11月  7 11:55 libpcre_la-pcre_valid_utf8.lo
8.0K -rw-r--r--. 1 root root 5.5K 11月  7 11:55 libpcre_la-pcre_valid_utf8.o
4.0K -rw-r--r--. 1 root root  335 11月  7 11:55 libpcre_la-pcre_version.lo
8.0K -rw-r--r--. 1 root root 5.4K 11月  7 11:55 libpcre_la-pcre_version.o
4.0K -rw-r--r--. 1 root root  332 11月  7 11:55 libpcre_la-pcre_xclass.lo
8.0K -rw-r--r--. 1 root root 6.9K 11月  7 11:55 libpcre_la-pcre_xclass.o
4.0K -rw-r--r--. 1 root root  323 11月  7 11:55 libpcre.pc
4.0K -rw-r--r--. 1 1169 1169  372 4月  24 2015 libpcre.pc.in
4.0K -rw-r--r--. 1 root root 1.3K 11月  7 11:55 libpcreposix.la
4.0K -rw-r--r--. 1 root root  341 11月  7 11:55 libpcreposix_la-pcreposix.lo
 24K -rw-r--r--. 1 root root  24K 11月  7 11:55 libpcreposix_la-pcreposix.o
4.0K -rw-r--r--. 1 root root  311 11月  7 11:55 libpcreposix.pc
4.0K -rw-r--r--. 1 1169 1169  330 1月  31 2014 libpcreposix.pc.in
4.0K drwxr-xr-x. 2 root root 4.0K 11月  7 11:55 .libs
448K -rwxr-xr-x. 1 root root 344K 11月  7 11:55 libtool
4.0K -rw-r--r--. 1 1169 1169 3.2K 2月  21 2018 LICENCE
324K -rw-r--r--. 1 1169 1169 324K 3月  20 2018 ltmain.sh
   0 drwxr-xr-x. 2 1169 1169  151 3月  20 2018 m4
184K -rw-r--r--. 1 root root 183K 11月  7 11:55 Makefile
 28K -rw-r--r--. 1 1169 1169  27K 3月   3 2016 Makefile.am
208K -rw-r--r--. 1 1169 1169 208K 3月  20 2018 Makefile.in
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 makevp.bat
4.0K -rw-r--r--. 1 1169 1169  345 1月  31 2014 makevp_c.txt
4.0K -rw-r--r--. 1 1169 1169  598 1月  31 2014 makevp_l.txt
8.0K -rwxr-xr-x. 1 1169 1169 6.8K 3月  20 2018 missing
 32K -rw-r--r--. 1 1169 1169  29K 3月  20 2018 NEWS
 32K -rw-r--r--. 1 1169 1169  31K 2月  21 2018 NON-AUTOTOOLS-BUILD
4.0K -rw-r--r--. 1 1169 1169  229 1月  31 2014 NON-UNIX-USE
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_byte_order.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_chartables.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_compile.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_config.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_dfa_exec.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_exec.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_fullinfo.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_get.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_globals.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_jit_compile.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_maketables.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_newline.c
4.0K -rw-r--r--. 1 1169 1169 3.2K 1月  31 2014 pcre16_ord2utf16.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_printint.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_refcount.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_string_utils.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_study.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_tables.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_ucd.c
8.0K -rw-r--r--. 1 1169 1169 4.8K 1月  31 2014 pcre16_utf16_utils.c
8.0K -rw-r--r--. 1 1169 1169 4.5K 1月  31 2014 pcre16_valid_utf16.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_version.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre16_xclass.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_byte_order.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_chartables.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_compile.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_config.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_dfa_exec.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_exec.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_fullinfo.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_get.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_globals.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_jit_compile.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_maketables.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_newline.c
4.0K -rw-r--r--. 1 1169 1169 3.1K 1月  31 2014 pcre32_ord2utf32.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_printint.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_refcount.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_string_utils.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_study.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_tables.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_ucd.c
8.0K -rw-r--r--. 1 1169 1169 5.0K 1月  31 2014 pcre32_utf32_utils.c
8.0K -rw-r--r--. 1 1169 1169 4.1K 1月  31 2014 pcre32_valid_utf32.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_version.c
4.0K -rw-r--r--. 1 1169 1169 2.2K 1月  31 2014 pcre32_xclass.c
 12K -rw-r--r--. 1 1169 1169 9.1K 4月   4 2014 pcre_byte_order.c
   0 lrwxrwxrwx. 1 root root   24 11月  7 11:55 pcre_chartables.c -> ./pcre_chartables.c.dist
8.0K -rw-r--r--. 1 1169 1169 7.7K 1月  31 2014 pcre_chartables.c.dist
316K -rw-r--r--. 1 1169 1169 315K 12月 12 2017 pcre_compile.c
4.0K -rwxr-xr-x. 1 root root 2.4K 11月  7 11:55 pcre-config
8.0K -rw-r--r--. 1 1169 1169 4.9K 1月  31 2014 pcre_config.c
4.0K -rw-r--r--. 1 1169 1169 2.5K 1月  31 2014 pcre-config.in
8.0K -rw-r--r--. 1 root root 6.7K 11月  7 11:55 pcrecpparg.h
8.0K -rw-r--r--. 1 1169 1169 6.8K 1月  31 2014 pcrecpparg.h.in
 36K -rw-r--r--. 1 1169 1169  33K 6月  14 2016 pcrecpp.cc
 28K -rw-r--r--. 1 1169 1169  26K 1月  31 2014 pcrecpp.h
4.0K -rw-r--r--. 1 1169 1169 2.9K 1月  31 2014 pcrecpp_internal.h
8.0K -rwxr-xr-x. 1 root root 7.5K 11月  7 11:55 pcrecpp_unittest
 40K -rw-r--r--. 1 1169 1169  39K 4月  22 2017 pcrecpp_unittest.cc
260K -rw-r--r--. 1 root root 258K 11月  7 11:55 pcrecpp_unittest-pcrecpp_unittest.o
 16K -rw-r--r--. 1 1169 1169  16K 1月  31 2014 pcredemo.c
124K -rw-r--r--. 1 1169 1169 124K 11月 17 2017 pcre_dfa_exec.c
216K -rw-r--r--. 1 1169 1169 214K 2月  20 2018 pcre_exec.c
8.0K -rw-r--r--. 1 1169 1169 7.7K 1月  31 2014 pcre_fullinfo.c
 24K -rw-r--r--. 1 1169 1169  23K 3月  27 2017 pcre_get.c
 28K -rw-r--r--. 1 1169 1169  26K 1月  31 2014 pcregexp.pas
4.0K -rw-r--r--. 1 1169 1169 3.8K 2月   9 2014 pcre_globals.c
8.0K -rwxr-xr-x. 1 root root 7.5K 11月  7 11:55 pcregrep
 96K -rw-r--r--. 1 1169 1169  96K 2月  25 2018 pcregrep.c
208K -rw-r--r--. 1 root root 206K 11月  7 11:55 pcregrep-pcregrep.o
 32K -rw-r--r--. 1 root root  31K 11月  7 11:55 pcre.h
 32K -rw-r--r--. 1 1169 1169  31K 3月  20 2018 pcre.h.generic
 32K -rw-r--r--. 1 1169 1169  32K 8月  19 2017 pcre.h.in
112K -rw-r--r--. 1 1169 1169 112K 6月  14 2017 pcre_internal.h
356K -rw-r--r--. 1 1169 1169 356K 1月  11 2018 pcre_jit_compile.c
 72K -rw-r--r--. 1 1169 1169  72K 7月   2 2016 pcre_jit_test.c
8.0K -rw-r--r--. 1 1169 1169 5.8K 1月  31 2014 pcre_maketables.c
8.0K -rw-r--r--. 1 1169 1169 6.1K 1月  31 2014 pcre_newline.c
4.0K -rw-r--r--. 1 1169 1169 3.2K 1月  31 2014 pcre_ord2utf8.c
 20K -rw-r--r--. 1 1169 1169  17K 2月  20 2018 pcreposix.c
8.0K -rw-r--r--. 1 1169 1169 5.4K 1月  31 2014 pcreposix.h
 24K -rw-r--r--. 1 1169 1169  23K 1月  31 2014 pcre_printint.c
4.0K -rw-r--r--. 1 1169 1169 3.7K 1月  31 2014 pcre_refcount.c
8.0K -rw-r--r--. 1 1169 1169 5.5K 1月  31 2014 pcre_scanner.cc
8.0K -rw-r--r--. 1 1169 1169 6.5K 1月  31 2014 pcre_scanner.h
8.0K -rwxr-xr-x. 1 root root 7.6K 11月  7 11:55 pcre_scanner_unittest
8.0K -rw-r--r--. 1 1169 1169 5.2K 4月  22 2017 pcre_scanner_unittest.cc
 20K -rw-r--r--. 1 root root  17K 11月  7 11:55 pcre_scanner_unittest-pcre_scanner_unittest.o
4.0K -rw-r--r--. 1 1169 1169 1.9K 1月  31 2014 pcre_stringpiece.cc
8.0K -rw-r--r--. 1 root root 6.2K 11月  7 11:55 pcre_stringpiece.h
8.0K -rw-r--r--. 1 1169 1169 6.3K 4月  22 2017 pcre_stringpiece.h.in
8.0K -rwxr-xr-x. 1 root root 7.6K 11月  7 11:55 pcre_stringpiece_unittest
4.0K -rw-r--r--. 1 1169 1169 3.6K 4月  22 2017 pcre_stringpiece_unittest.cc
 24K -rw-r--r--. 1 root root  23K 11月  7 11:55 pcre_stringpiece_unittest-pcre_stringpiece_unittest.o
8.0K -rw-r--r--. 1 1169 1169 5.3K 1月  31 2014 pcre_string_utils.c
 48K -rw-r--r--. 1 1169 1169  48K 2月  28 2016 pcre_study.c
 32K -rw-r--r--. 1 1169 1169  29K 4月  30 2017 pcre_tables.c
8.0K -rwxr-xr-x. 1 root root 7.5K 11月  7 11:55 pcretest
172K -rw-r--r--. 1 1169 1169 170K 6月  14 2017 pcretest.c
 56K -rw-r--r--. 1 root root  53K 11月  7 11:55 pcretest-pcre_printint.o
392K -rw-r--r--. 1 root root 391K 11月  7 11:55 pcretest-pcretest.o
204K -rw-r--r--. 1 1169 1169 204K 2月  25 2017 pcre_ucd.c
 12K -rw-r--r--. 1 1169 1169  10K 1月  31 2014 pcre_valid_utf8.c
8.0K -rw-r--r--. 1 1169 1169 4.2K 1月  31 2014 pcre_version.c
 12K -rw-r--r--. 1 1169 1169 8.1K 11月 18 2015 pcre_xclass.c
8.0K -rwxr-xr-x. 1 1169 1169 6.2K 9月  15 2014 perltest.pl
8.0K -rwxr-xr-x. 1 1169 1169 7.2K 1月  31 2014 PrepareRelease
 48K -rw-r--r--. 1 1169 1169  45K 2月  11 2015 README
 32K -rwxr-xr-x. 1 1169 1169  29K 5月  31 2016 RunGrepTest
 32K -rwxr-xr-x. 1 1169 1169  29K 3月   1 2016 RunTest
 20K -rw-r--r--. 1 1169 1169  18K 1月  31 2014 RunTest.bat
4.0K drwxr-xr-x. 2 1169 1169 4.0K 3月  20 2018 sljit
4.0K -rw-r--r--. 1 root root   23 11月  7 11:55 stamp-h1
4.0K drwxr-xr-x. 2 1169 1169 4.0K 3月  20 2018 testdata
8.0K -rwxr-xr-x. 1 1169 1169 4.6K 3月  20 2018 test-driver
8.0K -rw-r--r--. 1 1169 1169 5.1K 9月  15 2014 ucp.h
[root@bogon pcre-8.42]# make clean
 rm -f pcretest pcregrep
test -z "pcre_chartables.c testsavedregex teststderr testtemp* testtry testNinput testtrygrep teststderrgrep testNinputgrep"                                                                                                           || rm -f pcre_chartables.c testsavedregex teststderr testtemp* testtry testNinput testtrygrep teststderrgrep testNinputgrep
test -z "libpcre.la   libpcreposix.la libpcrecpp.la" || rm -f libpcre.la   libpcreposix.la libpcrecpp.la
rm -f ./so_locations
rm -rf .libs _libs
 rm -f pcrecpp_unittest pcre_scanner_unittest pcre_stringpiece_unittest
rm -f *.o
test -z "pcrecpp_unittest.log pcre_scanner_unittest.log pcre_stringpiece_unittest.log RunTest.log RunGrepTest.log" || rm -f                                                                                                           pcrecpp_unittest.log pcre_scanner_unittest.log pcre_stringpiece_unittest.log RunTest.log RunGrepTest.log
test -z "pcrecpp_unittest.trs pcre_scanner_unittest.trs pcre_stringpiece_unittest.trs RunTest.trs RunGrepTest.trs" || rm -f                                                                                                           pcrecpp_unittest.trs pcre_scanner_unittest.trs pcre_stringpiece_unittest.trs RunTest.trs RunGrepTest.trs
test -z "test-suite.log" || rm -f test-suite.log
rm -f *.lo
[root@bogon pcre-8.42]#

  

[root@bogon src]# cd zlib-1.2.8/
[root@bogon zlib-1.2.8]# ll -as
总用量 800
 4 drwxr-xr-x. 14  501 games  4096 4月  29 2013 .
 0 drwxr-xr-x.  4 root root    146 11月  7 12:06 ..
 8 -rw-r--r--.  1  501 games  4968 9月  11 2011 adler32.c
 0 drwxr-xr-x.  2  501 games    46 2月  14 2010 amiga
 0 drwxr-xr-x.  2  501 games    73 4月  29 2013 as400
76 -rw-r--r--.  1  501 games 76402 4月  29 2013 ChangeLog
 8 -rw-r--r--.  1  501 games  8098 4月  29 2013 CMakeLists.txt
 4 -rw-r--r--.  1  501 games  2529 8月  13 2012 compress.c
28 -rwxr-xr-x.  1  501 games 26082 3月  24 2013 configure
 4 drwxr-xr-x. 22  501 games  4096 4月  29 2013 contrib
16 -rw-r--r--.  1  501 games 13174 4月  30 2012 crc32.c
32 -rw-r--r--.  1  501 games 30562 4月  30 2012 crc32.h
72 -rw-r--r--.  1  501 games 71476 4月  29 2013 deflate.c
16 -rw-r--r--.  1  501 games 12774 6月   3 2012 deflate.h
 0 drwxr-xr-x.  2  501 games   104 9月  11 2011 doc
 0 drwxr-xr-x.  2  501 games   188 10月 12 2012 examples
20 -rw-r--r--.  1  501 games 16573 11月 28 2011 FAQ
 4 -rw-r--r--.  1  501 games   678 2月  14 2010 gzclose.c
 8 -rw-r--r--.  1  501 games  6552 4月  14 2013 gzguts.h
20 -rw-r--r--.  1  501 games 16415 3月  25 2013 gzlib.c
20 -rw-r--r--.  1  501 games 18694 3月  25 2013 gzread.c
16 -rw-r--r--.  1  501 games 16199 4月  14 2013 gzwrite.c
 4 -rw-r--r--.  1  501 games  1988 3月  12 2012 INDEX
24 -rw-r--r--.  1  501 games 22709 8月  13 2012 infback.c
16 -rw-r--r--.  1  501 games 13455 3月  25 2013 inffast.c
 4 -rw-r--r--.  1  501 games   427 4月  19 2010 inffast.h
 8 -rw-r--r--.  1  501 games  6332 10月  6 2011 inffixed.h
56 -rw-r--r--.  1  501 games 53512 8月  13 2012 inflate.c
 8 -rw-r--r--.  1  501 games  6399 12月 26 2009 inflate.h
16 -rw-r--r--.  1  501 games 13028 4月  29 2013 inftrees.c
 4 -rw-r--r--.  1  501 games  2928 4月  19 2010 inftrees.h
 4 -rw-r--r--.  1  501 games   100 9月  10 2011 Makefile
12 -rw-r--r--.  1  501 games  8985 4月  29 2013 Makefile.in
28 -rw-r--r--.  1  501 games 26402 3月  10 2012 make_vms.com
 0 drwxr-xr-x.  2  501 games   105 11月 28 2011 msdos
 0 drwxr-xr-x.  2  501 games    36 12月 21 2009 nintendods
 0 drwxr-xr-x.  3  501 games   117 3月  13 2012 old
 0 drwxr-xr-x.  2  501 games    25 4月  29 2013 qnx
 8 -rw-r--r--.  1  501 games  5185 4月  29 2013 README
 0 drwxr-xr-x.  2  501 games    59 8月  13 2012 test
 4 -rw-r--r--.  1  501 games  3135 4月  29 2013 treebuild.xml
44 -rw-r--r--.  1  501 games 44255 8月  13 2012 trees.c
12 -rw-r--r--.  1  501 games  8472 4月  19 2010 trees.h
 4 -rw-r--r--.  1  501 games  2003 8月  13 2012 uncompr.c
 0 drwxr-xr-x.  2  501 games    46 2月  14 2010 watcom
 0 drwxr-xr-x.  2  501 games   160 4月  29 2013 win32
16 -rw-r--r--.  1  501 games 15508 4月  29 2013 zconf.h
16 -rw-r--r--.  1  501 games 15559 4月  29 2013 zconf.h.cmakein
16 -rw-r--r--.  1  501 games 15508 4月  29 2013 zconf.h.in
 4 -rwxr-xr-x.  1  501 games  3895 10月 15 2006 zlib2ansi
 8 -rw-r--r--.  1  501 games  4236 4月  29 2013 zlib.3
12 -rw-r--r--.  1  501 games  8734 4月  29 2013 zlib.3.pdf
88 -rw-r--r--.  1  501 games 87883 4月  29 2013 zlib.h
 4 -rw-r--r--.  1  501 games  1192 3月  24 2013 zlib.map
 4 -rw-r--r--.  1  501 games   294 3月  12 2012 zlib.pc.cmakein
 4 -rw-r--r--.  1  501 games   254 4月  18 2010 zlib.pc.in
 8 -rw-r--r--.  1  501 games  7414 8月  13 2012 zutil.c
 8 -rw-r--r--.  1  501 games  6766 3月  25 2013 zutil.h
[root@bogon zlib-1.2.8]# ./configure
Checking for gcc...
Checking for shared library support...
Building shared library libz.so.1.2.8 with gcc.
Checking for off64_t... Yes.
Checking for fseeko... Yes.
Checking for strerror... Yes.
Checking for unistd.h... Yes.
Checking for stdarg.h... Yes.
Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf().
Checking for vsnprintf() in stdio.h... Yes.
Checking for return value of vsnprintf()... Yes.
Checking for attribute(visibility) support... Yes.
[root@bogon zlib-1.2.8]# ll -as
总用量 816
 4 drwxr-xr-x. 14  501 games  4096 11月  7 12:06 .
 0 drwxr-xr-x.  4 root root    146 11月  7 12:06 ..
 8 -rw-r--r--.  1  501 games  4968 9月  11 2011 adler32.c
 0 drwxr-xr-x.  2  501 games    46 2月  14 2010 amiga
 0 drwxr-xr-x.  2  501 games    73 4月  29 2013 as400
76 -rw-r--r--.  1  501 games 76402 4月  29 2013 ChangeLog
 8 -rw-r--r--.  1  501 games  8098 4月  29 2013 CMakeLists.txt
 4 -rw-r--r--.  1  501 games  2529 8月  13 2012 compress.c
28 -rwxr-xr-x.  1  501 games 26082 3月  24 2013 configure
 4 -rw-r--r--.  1 root root   3284 11月  7 12:06 configure.log
 4 drwxr-xr-x. 22  501 games  4096 4月  29 2013 contrib
16 -rw-r--r--.  1  501 games 13174 4月  30 2012 crc32.c
32 -rw-r--r--.  1  501 games 30562 4月  30 2012 crc32.h
72 -rw-r--r--.  1  501 games 71476 4月  29 2013 deflate.c
16 -rw-r--r--.  1  501 games 12774 6月   3 2012 deflate.h
 0 drwxr-xr-x.  2  501 games   104 9月  11 2011 doc
 0 drwxr-xr-x.  2  501 games   188 10月 12 2012 examples
20 -rw-r--r--.  1  501 games 16573 11月 28 2011 FAQ
 4 -rw-r--r--.  1  501 games   678 2月  14 2010 gzclose.c
 8 -rw-r--r--.  1  501 games  6552 4月  14 2013 gzguts.h
20 -rw-r--r--.  1  501 games 16415 3月  25 2013 gzlib.c
20 -rw-r--r--.  1  501 games 18694 3月  25 2013 gzread.c
16 -rw-r--r--.  1  501 games 16199 4月  14 2013 gzwrite.c
 4 -rw-r--r--.  1  501 games  1988 3月  12 2012 INDEX
24 -rw-r--r--.  1  501 games 22709 8月  13 2012 infback.c
16 -rw-r--r--.  1  501 games 13455 3月  25 2013 inffast.c
 4 -rw-r--r--.  1  501 games   427 4月  19 2010 inffast.h
 8 -rw-r--r--.  1  501 games  6332 10月  6 2011 inffixed.h
56 -rw-r--r--.  1  501 games 53512 8月  13 2012 inflate.c
 8 -rw-r--r--.  1  501 games  6399 12月 26 2009 inflate.h
16 -rw-r--r--.  1  501 games 13028 4月  29 2013 inftrees.c
 4 -rw-r--r--.  1  501 games  2928 4月  19 2010 inftrees.h
12 -rw-r--r--.  1  501 games  9132 11月  7 12:06 Makefile
12 -rw-r--r--.  1  501 games  8985 4月  29 2013 Makefile.in
28 -rw-r--r--.  1  501 games 26402 3月  10 2012 make_vms.com
 0 drwxr-xr-x.  2  501 games   105 11月 28 2011 msdos
 0 drwxr-xr-x.  2  501 games    36 12月 21 2009 nintendods
 0 drwxr-xr-x.  3  501 games   117 3月  13 2012 old
 0 drwxr-xr-x.  2  501 games    25 4月  29 2013 qnx
 8 -rw-r--r--.  1  501 games  5185 4月  29 2013 README
 0 drwxr-xr-x.  2  501 games    59 8月  13 2012 test
 4 -rw-r--r--.  1  501 games  3135 4月  29 2013 treebuild.xml
44 -rw-r--r--.  1  501 games 44255 8月  13 2012 trees.c
12 -rw-r--r--.  1  501 games  8472 4月  19 2010 trees.h
 4 -rw-r--r--.  1  501 games  2003 8月  13 2012 uncompr.c
 0 drwxr-xr-x.  2  501 games    46 2月  14 2010 watcom
 0 drwxr-xr-x.  2  501 games   160 4月  29 2013 win32
16 -rw-r--r--.  1 root root  15472 11月  7 12:06 zconf.h
16 -rw-r--r--.  1  501 games 15559 4月  29 2013 zconf.h.cmakein
16 -rw-r--r--.  1  501 games 15508 4月  29 2013 zconf.h.in
 4 -rwxr-xr-x.  1  501 games  3895 10月 15 2006 zlib2ansi
 8 -rw-r--r--.  1  501 games  4236 4月  29 2013 zlib.3
12 -rw-r--r--.  1  501 games  8734 4月  29 2013 zlib.3.pdf
88 -rw-r--r--.  1  501 games 87883 4月  29 2013 zlib.h
 4 -rw-r--r--.  1  501 games  1192 3月  24 2013 zlib.map
 4 -rw-r--r--.  1 root root    258 11月  7 12:06 zlib.pc
 4 -rw-r--r--.  1  501 games   294 3月  12 2012 zlib.pc.cmakein
 4 -rw-r--r--.  1  501 games   254 4月  18 2010 zlib.pc.in
 8 -rw-r--r--.  1  501 games  7414 8月  13 2012 zutil.c
 8 -rw-r--r--.  1  501 games  6766 3月  25 2013 zutil.h
[root@bogon zlib-1.2.8]# make install
gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o adler32.o adler32.c
gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o crc32.o crc32.c
gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o deflate.o deflate.c
gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o infback.o infback.c
gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o inffast.o inffast.c
gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o inflate.o inflate.c
gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o inftrees.o inftrees.c
gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o trees.o trees.c
gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o zutil.o zutil.c
gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o compress.o compress.c
gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o uncompr.o uncompr.c
gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o gzclose.o gzclose.c
gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o gzlib.o gzlib.c
gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o gzread.o gzread.c
gcc -O3  -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN   -c -o gzwrite.o gzwrite.c
ar rc libz.a adler32.o crc32.o deflate.o infback.o inffast.o inflate.o inftrees.o trees.o zutil.o compress.o uncompr.o gzclose.o gzlib.o gzread.o gzwrite.o
gcc -O3  -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -DPIC -c -o objs/adler32.o adler32.c
gcc -O3  -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -DPIC -c -o objs/crc32.o crc32.c
gcc -O3  -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -DPIC -c -o objs/deflate.o deflate.c
gcc -O3  -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -DPIC -c -o objs/infback.o infback.c
gcc -O3  -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -DPIC -c -o objs/inffast.o inffast.c
gcc -O3  -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -DPIC -c -o objs/inflate.o inflate.c
gcc -O3  -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -DPIC -c -o objs/inftrees.o inftrees.c
gcc -O3  -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -DPIC -c -o objs/trees.o trees.c
gcc -O3  -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -DPIC -c -o objs/zutil.o zutil.c
gcc -O3  -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -DPIC -c -o objs/compress.o compress.c
gcc -O3  -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -DPIC -c -o objs/uncompr.o uncompr.c
gcc -O3  -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -DPIC -c -o objs/gzclose.o gzclose.c
gcc -O3  -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -DPIC -c -o objs/gzlib.o gzlib.c
gcc -O3  -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -DPIC -c -o objs/gzread.o gzread.c
gcc -O3  -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -DPIC -c -o objs/gzwrite.o gzwrite.c
gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map -O3  -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -o libz.so.1.2.8 adler32.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo compress.lo uncompr.lo gzclose.lo gzlib.lo gzread.lo gzwrite.lo  -lc
rm -f libz.so libz.so.1
ln -s libz.so.1.2.8 libz.so
ln -s libz.so.1.2.8 libz.so.1
cp libz.a /usr/local/lib
chmod 644 /usr/local/lib/libz.a
cp libz.so.1.2.8 /usr/local/lib
chmod 755 /usr/local/lib/libz.so.1.2.8
cp zlib.3 /usr/local/share/man/man3
chmod 644 /usr/local/share/man/man3/zlib.3
cp zlib.pc /usr/local/lib/pkgconfig
chmod 644 /usr/local/lib/pkgconfig/zlib.pc
cp zlib.h zconf.h /usr/local/include
chmod 644 /usr/local/include/zlib.h /usr/local/include/zconf.h
[root@bogon zlib-1.2.8]# ll -as
总用量 1380
  4 drwxr-xr-x. 14  501 games   4096 11月  7 12:07 .
  0 drwxr-xr-x.  4 root root     146 11月  7 12:06 ..
  8 -rw-r--r--.  1  501 games   4968 9月  11 2011 adler32.c
  4 -rw-r--r--.  1 root root    3160 11月  7 12:07 adler32.lo
  4 -rw-r--r--.  1 root root    3160 11月  7 12:07 adler32.o
  0 drwxr-xr-x.  2  501 games     46 2月  14 2010 amiga
  0 drwxr-xr-x.  2  501 games     73 4月  29 2013 as400
 76 -rw-r--r--.  1  501 games  76402 4月  29 2013 ChangeLog
  8 -rw-r--r--.  1  501 games   8098 4月  29 2013 CMakeLists.txt
  4 -rw-r--r--.  1  501 games   2529 8月  13 2012 compress.c
  4 -rw-r--r--.  1 root root    2160 11月  7 12:07 compress.lo
  4 -rw-r--r--.  1 root root    2368 11月  7 12:07 compress.o
 28 -rwxr-xr-x.  1  501 games  26082 3月  24 2013 configure
  4 -rw-r--r--.  1 root root    3284 11月  7 12:06 configure.log
  4 drwxr-xr-x. 22  501 games   4096 4月  29 2013 contrib
 16 -rw-r--r--.  1  501 games  13174 4月  30 2012 crc32.c
 32 -rw-r--r--.  1  501 games  30562 4月  30 2012 crc32.h
 12 -rw-r--r--.  1 root root   11296 11月  7 12:07 crc32.lo
 12 -rw-r--r--.  1 root root   12168 11月  7 12:07 crc32.o
 72 -rw-r--r--.  1  501 games  71476 4月  29 2013 deflate.c
 16 -rw-r--r--.  1  501 games  12774 6月   3 2012 deflate.h
 24 -rw-r--r--.  1 root root   22696 11月  7 12:07 deflate.lo
 24 -rw-r--r--.  1 root root   24536 11月  7 12:07 deflate.o
  0 drwxr-xr-x.  2  501 games    104 9月  11 2011 doc
  0 drwxr-xr-x.  2  501 games    188 10月 12 2012 examples
 20 -rw-r--r--.  1  501 games  16573 11月 28 2011 FAQ
  4 -rw-r--r--.  1  501 games    678 2月  14 2010 gzclose.c
  4 -rw-r--r--.  1 root root    1488 11月  7 12:07 gzclose.lo
  4 -rw-r--r--.  1 root root    1440 11月  7 12:07 gzclose.o
  8 -rw-r--r--.  1  501 games   6552 4月  14 2013 gzguts.h
 20 -rw-r--r--.  1  501 games  16415 3月  25 2013 gzlib.c
 12 -rw-r--r--.  1 root root    9304 11月  7 12:07 gzlib.lo
 12 -rw-r--r--.  1 root root   10376 11月  7 12:07 gzlib.o
 20 -rw-r--r--.  1  501 games  18694 3月  25 2013 gzread.c
  8 -rw-r--r--.  1 root root    8160 11月  7 12:07 gzread.lo
  8 -rw-r--r--.  1 root root    8040 11月  7 12:07 gzread.o
 16 -rw-r--r--.  1  501 games  16199 4月  14 2013 gzwrite.c
 12 -rw-r--r--.  1 root root   12184 11月  7 12:07 gzwrite.lo
 16 -rw-r--r--.  1 root root   14632 11月  7 12:07 gzwrite.o
  4 -rw-r--r--.  1  501 games   1988 3月  12 2012 INDEX
 24 -rw-r--r--.  1  501 games  22709 8月  13 2012 infback.c
 12 -rw-r--r--.  1 root root   12032 11月  7 12:07 infback.lo
 12 -rw-r--r--.  1 root root   11552 11月  7 12:07 infback.o
 16 -rw-r--r--.  1  501 games  13455 3月  25 2013 inffast.c
  4 -rw-r--r--.  1  501 games    427 4月  19 2010 inffast.h
  8 -rw-r--r--.  1 root root    4744 11月  7 12:07 inffast.lo
  8 -rw-r--r--.  1 root root    4648 11月  7 12:07 inffast.o
  8 -rw-r--r--.  1  501 games   6332 10月  6 2011 inffixed.h
 56 -rw-r--r--.  1  501 games  53512 8月  13 2012 inflate.c
  8 -rw-r--r--.  1  501 games   6399 12月 26 2009 inflate.h
 24 -rw-r--r--.  1 root root   21536 11月  7 12:07 inflate.lo
 24 -rw-r--r--.  1 root root   21952 11月  7 12:07 inflate.o
 16 -rw-r--r--.  1  501 games  13028 4月  29 2013 inftrees.c
  4 -rw-r--r--.  1  501 games   2928 4月  19 2010 inftrees.h
  8 -rw-r--r--.  1 root root    4832 11月  7 12:07 inftrees.lo
  8 -rw-r--r--.  1 root root    4800 11月  7 12:07 inftrees.o
140 -rw-r--r--.  1 root root  142230 11月  7 12:07 libz.a
  0 lrwxrwxrwx.  1 root root      13 11月  7 12:07 libz.so -> libz.so.1.2.8
  0 lrwxrwxrwx.  1 root root      13 11月  7 12:07 libz.so.1 -> libz.so.1.2.8
108 -rwxr-xr-x.  1 root root  109184 11月  7 12:07 libz.so.1.2.8
 12 -rw-r--r--.  1  501 games   9132 11月  7 12:06 Makefile
 12 -rw-r--r--.  1  501 games   8985 4月  29 2013 Makefile.in
 28 -rw-r--r--.  1  501 games  26402 3月  10 2012 make_vms.com
  0 drwxr-xr-x.  2  501 games    105 11月 28 2011 msdos
  0 drwxr-xr-x.  2  501 games     36 12月 21 2009 nintendods
  0 drwxr-xr-x.  3  501 games    117 3月  13 2012 old
  0 drwxr-xr-x.  2  501 games     25 4月  29 2013 qnx
  8 -rw-r--r--.  1  501 games   5185 4月  29 2013 README
  0 drwxr-xr-x.  2  501 games     59 8月  13 2012 test
  4 -rw-r--r--.  1  501 games   3135 4月  29 2013 treebuild.xml
 44 -rw-r--r--.  1  501 games  44255 8月  13 2012 trees.c
 12 -rw-r--r--.  1  501 games   8472 4月  19 2010 trees.h
 16 -rw-r--r--.  1 root root   15808 11月  7 12:07 trees.lo
 16 -rw-r--r--.  1 root root   15672 11月  7 12:07 trees.o
  4 -rw-r--r--.  1  501 games   2003 8月  13 2012 uncompr.c
  4 -rw-r--r--.  1 root root    1960 11月  7 12:07 uncompr.lo
  4 -rw-r--r--.  1 root root    1856 11月  7 12:07 uncompr.o
  0 drwxr-xr-x.  2  501 games     46 2月  14 2010 watcom
  0 drwxr-xr-x.  2  501 games    160 4月  29 2013 win32
 16 -rw-r--r--.  1 root root   15472 11月  7 12:06 zconf.h
 16 -rw-r--r--.  1  501 games  15559 4月  29 2013 zconf.h.cmakein
 16 -rw-r--r--.  1  501 games  15508 4月  29 2013 zconf.h.in
  4 -rwxr-xr-x.  1  501 games   3895 10月 15 2006 zlib2ansi
  8 -rw-r--r--.  1  501 games   4236 4月  29 2013 zlib.3
 12 -rw-r--r--.  1  501 games   8734 4月  29 2013 zlib.3.pdf
 88 -rw-r--r--.  1  501 games  87883 4月  29 2013 zlib.h
  4 -rw-r--r--.  1  501 games   1192 3月  24 2013 zlib.map
  4 -rw-r--r--.  1 root root     258 11月  7 12:06 zlib.pc
  4 -rw-r--r--.  1  501 games    294 3月  12 2012 zlib.pc.cmakein
  4 -rw-r--r--.  1  501 games    254 4月  18 2010 zlib.pc.in
  8 -rw-r--r--.  1  501 games   7414 8月  13 2012 zutil.c
  8 -rw-r--r--.  1  501 games   6766 3月  25 2013 zutil.h
  4 -rw-r--r--.  1 root root    2672 11月  7 12:07 zutil.lo
  4 -rw-r--r--.  1 root root    2592 11月  7 12:07 zutil.o
[root@bogon zlib-1.2.8]# make clean
rm -f *.o *.lo *~ \
   example minigzip examplesh minigzipsh \
   example64 minigzip64 \
   infcover \
   libz.* foo.gz so_locations \
   _match.s maketree contrib/infback9/*.o
rm -rf objs
rm -f *.gcda *.gcno *.gcov
rm -f contrib/infback9/*.gcda contrib/infback9/*.gcno contrib/infback9/*.gcov
[root@bogon zlib-1.2.8]# ll -as
总用量 816
 4 drwxr-xr-x. 14  501 games  4096 11月  7 12:07 .
 0 drwxr-xr-x.  4 root root    146 11月  7 12:06 ..
 8 -rw-r--r--.  1  501 games  4968 9月  11 2011 adler32.c
 0 drwxr-xr-x.  2  501 games    46 2月  14 2010 amiga
 0 drwxr-xr-x.  2  501 games    73 4月  29 2013 as400
76 -rw-r--r--.  1  501 games 76402 4月  29 2013 ChangeLog
 8 -rw-r--r--.  1  501 games  8098 4月  29 2013 CMakeLists.txt
 4 -rw-r--r--.  1  501 games  2529 8月  13 2012 compress.c
28 -rwxr-xr-x.  1  501 games 26082 3月  24 2013 configure
 4 -rw-r--r--.  1 root root   3284 11月  7 12:06 configure.log
 4 drwxr-xr-x. 22  501 games  4096 4月  29 2013 contrib
16 -rw-r--r--.  1  501 games 13174 4月  30 2012 crc32.c
32 -rw-r--r--.  1  501 games 30562 4月  30 2012 crc32.h
72 -rw-r--r--.  1  501 games 71476 4月  29 2013 deflate.c
16 -rw-r--r--.  1  501 games 12774 6月   3 2012 deflate.h
 0 drwxr-xr-x.  2  501 games   104 9月  11 2011 doc
 0 drwxr-xr-x.  2  501 games   188 10月 12 2012 examples
20 -rw-r--r--.  1  501 games 16573 11月 28 2011 FAQ
 4 -rw-r--r--.  1  501 games   678 2月  14 2010 gzclose.c
 8 -rw-r--r--.  1  501 games  6552 4月  14 2013 gzguts.h
20 -rw-r--r--.  1  501 games 16415 3月  25 2013 gzlib.c
20 -rw-r--r--.  1  501 games 18694 3月  25 2013 gzread.c
16 -rw-r--r--.  1  501 games 16199 4月  14 2013 gzwrite.c
 4 -rw-r--r--.  1  501 games  1988 3月  12 2012 INDEX
24 -rw-r--r--.  1  501 games 22709 8月  13 2012 infback.c
16 -rw-r--r--.  1  501 games 13455 3月  25 2013 inffast.c
 4 -rw-r--r--.  1  501 games   427 4月  19 2010 inffast.h
 8 -rw-r--r--.  1  501 games  6332 10月  6 2011 inffixed.h
56 -rw-r--r--.  1  501 games 53512 8月  13 2012 inflate.c
 8 -rw-r--r--.  1  501 games  6399 12月 26 2009 inflate.h
16 -rw-r--r--.  1  501 games 13028 4月  29 2013 inftrees.c
 4 -rw-r--r--.  1  501 games  2928 4月  19 2010 inftrees.h
12 -rw-r--r--.  1  501 games  9132 11月  7 12:06 Makefile
12 -rw-r--r--.  1  501 games  8985 4月  29 2013 Makefile.in
28 -rw-r--r--.  1  501 games 26402 3月  10 2012 make_vms.com
 0 drwxr-xr-x.  2  501 games   105 11月 28 2011 msdos
 0 drwxr-xr-x.  2  501 games    36 12月 21 2009 nintendods
 0 drwxr-xr-x.  3  501 games   117 3月  13 2012 old
 0 drwxr-xr-x.  2  501 games    25 4月  29 2013 qnx
 8 -rw-r--r--.  1  501 games  5185 4月  29 2013 README
 0 drwxr-xr-x.  2  501 games    59 8月  13 2012 test
 4 -rw-r--r--.  1  501 games  3135 4月  29 2013 treebuild.xml
44 -rw-r--r--.  1  501 games 44255 8月  13 2012 trees.c
12 -rw-r--r--.  1  501 games  8472 4月  19 2010 trees.h
 4 -rw-r--r--.  1  501 games  2003 8月  13 2012 uncompr.c
 0 drwxr-xr-x.  2  501 games    46 2月  14 2010 watcom
 0 drwxr-xr-x.  2  501 games   160 4月  29 2013 win32
16 -rw-r--r--.  1 root root  15472 11月  7 12:06 zconf.h
16 -rw-r--r--.  1  501 games 15559 4月  29 2013 zconf.h.cmakein
16 -rw-r--r--.  1  501 games 15508 4月  29 2013 zconf.h.in
 4 -rwxr-xr-x.  1  501 games  3895 10月 15 2006 zlib2ansi
 8 -rw-r--r--.  1  501 games  4236 4月  29 2013 zlib.3
12 -rw-r--r--.  1  501 games  8734 4月  29 2013 zlib.3.pdf
88 -rw-r--r--.  1  501 games 87883 4月  29 2013 zlib.h
 4 -rw-r--r--.  1  501 games  1192 3月  24 2013 zlib.map
 4 -rw-r--r--.  1 root root    258 11月  7 12:06 zlib.pc
 4 -rw-r--r--.  1  501 games   294 3月  12 2012 zlib.pc.cmakein
 4 -rw-r--r--.  1  501 games   254 4月  18 2010 zlib.pc.in
 8 -rw-r--r--.  1  501 games  7414 8月  13 2012 zutil.c
 8 -rw-r--r--.  1  501 games  6766 3月  25 2013 zutil.h
[root@bogon zlib-1.2.8]#

  

Makefile python源码安装

./configure

生成 Makefile

 

# Declare targets that aren't real files
.PHONY: all build_all sharedmods check-clean-src oldsharedmods test quicktest
.PHONY: install altinstall oldsharedinstall bininstall altbininstall
.PHONY: maninstall libinstall inclinstall libainstall sharedinstall
.PHONY: frameworkinstall frameworkinstallframework frameworkinstallstructure
.PHONY: frameworkinstallmaclib frameworkinstallapps frameworkinstallunixtools
.PHONY: frameworkaltinstallunixtools recheck clean clobber distclean
.PHONY: smelly funny patchcheck touch altmaninstall commoninstall
.PHONY: gdbhooks

https://zh.wikipedia.org/wiki/Make

示例

举例来说明makefile的结构和make如何运作。

editor: main.o text.o
	gcc -o editor main.o text.o
main.o: main.c def.h
	gcc -c main.c
text.o: text.c com.h
	gcc -c text.c
install:editor
	mv editor /usr/local

当我们输入:

make
或者
make editor

当editor这个target文件不存在,或者main.o、text.o这两个依赖文件被修改,都会导致make调用其下的命令“gcc -o editor main.o text.o”;接下来,由于引用到main.o和text.o,make会检查main.o的依赖main.c、def.h有无更新,如果有,则执行其下的命令“gcc -c main.c”;同样的道理,也适用于text.o。 于是,可有几种不同的输出:

  • 第一次运行:
gcc -c main.c
gcc -c text.c
gcc -o editor main.o text.o
  • main.c或/和def.h有修改:
gcc -c main.c
gcc -o editor main.o text.o
  • text.c或/和com.h有修改:
gcc -c text.c
gcc -o editor main.o text.o
  • main.c和text.c均有修改:
gcc -c main.c
gcc -c text.c
gcc -o editor main.o text.o

当我们输入:

make install

make会检查install的依赖editor是否是最新,如果是,则执行其下的命令“mv editor /usr/local”。由于这个过程并没有产生名为“install”的文件,所以,install是一个假目标。

 

make clean

 

32 -rw-r--r-- 1 501 test 30217 Dec 24 2018 weakrefobject.c
104 -rw-r--r-- 1 root root 103816 Oct 30 17:29 weakrefobject.o
[root@gateway Python-3.6.8]# pwd
/root/test/Python-3.6.8
[root@gateway Python-3.6.8]# make clean
find . -depth -name '__pycache__' -exec rm -rf {} ';'
find . -name '*.py[co]' -exec rm -f {} ';'
find . -name '*.[oa]' -exec rm -f {} ';'
find . -name '*.s[ol]' -exec rm -f {} ';'
find . -name '*.so.[0-9]*.[0-9]*' -exec rm -f {} ';'
find build -name 'fficonfig.h' -exec rm -f {} ';' || true
find build -name '*.py' -exec rm -f {} ';' || true
find build -name '*.py[co]' -exec rm -f {} ';' || true
rm -f pybuilddir.txt
rm -f Lib/lib2to3/*Grammar*.pickle
rm -f Programs/_testembed Programs/_freeze_importlib
find build -type f -a ! -name '*.gc??' -exec rm -f {} ';'
rm -f Include/pydtrace_probes.h
[root@gateway Python-3.6.8]#

 

 

460 -rw-r--r-- 1 501 test 468509 Dec 24 2018 unicodeobject.c
236 -rw-r--r-- 1 501 test 239714 Dec 24 2018 unicodetype_db.h
32 -rw-r--r-- 1 501 test 30217 Dec 24 2018 weakrefobject.c
[root@gateway Python-3.6.8]# ll -as Objects/

 

make clean 的逻辑也在Makefile中

clean: pycremoval
    find . -name '*.[oa]' -exec rm -f {} ';'
    find . -name '*.s[ol]' -exec rm -f {} ';'
    find . -name '*.so.[0-9]*.[0-9]*' -exec rm -f {} ';'
    find build -name 'fficonfig.h' -exec rm -f {} ';' || true
    find build -name '*.py' -exec rm -f {} ';' || true
    find build -name '*.py[co]' -exec rm -f {} ';' || true
    -rm -f pybuilddir.txt
    -rm -f Lib/lib2to3/*Grammar*.pickle
    -rm -f Programs/_testembed Programs/_freeze_importlib
    -find build -type f -a ! -name '*.gc??' -exec rm -f {} ';'
    -rm -f Include/pydtrace_probes.h

 

# Generated automatically from Makefile.pre by makesetup.
# Top-level Makefile for Python
#
# As distributed, this file is called Makefile.pre.in; it is processed
# into the real Makefile by running the script ./configure, which
# replaces things like @spam@ with values appropriate for your system.
# This means that if you edit Makefile, your changes get lost the next
# time you run the configure script.  Ideally, you can do:
#
#	./configure
#	make
#	make test
#	make install
#
# If you have a previous version of Python installed that you don't
# want to overwrite, you can use "make altinstall" instead of "make
# install".  Refer to the "Installing" section in the README file for
# additional details.
#
# See also the section "Build instructions" in the README file.

# === Variables set by makesetup ===

MODNAMES=        _thread posix errno pwd _sre _codecs _weakref _functools _operator _collections itertools atexit _signal _stat time _locale _io zipimport faulthandler _tracemalloc _symtable xxsubtype
MODOBJS=          Modules/_threadmodule.o  Modules/posixmodule.o  Modules/errnomodule.o  Modules/pwdmodule.o  Modules/_sre.o  Modules/_codecsmodule.o  Modules/_weakref.o  Modules/_functoolsmodule.o  Modules/_operator.o  Modules/_collectionsmodule.o  Modules/itertoolsmodule.o  Modules/atexitmodule.o  Modules/signalmodule.o  Modules/_stat.o  Modules/timemodule.o  Modules/_localemodule.o  Modules/_iomodule.o Modules/iobase.o Modules/fileio.o Modules/bytesio.o Modules/bufferedio.o Modules/textio.o Modules/stringio.o  Modules/zipimport.o  Modules/faulthandler.o  Modules/_tracemalloc.o Modules/hashtable.o  Modules/symtablemodule.o  Modules/xxsubtype.o
MODLIBS=        $(LOCALMODLIBS) $(BASEMODLIBS)

# === Variables set by configure
VERSION=	3.6
srcdir=		.

abs_srcdir=	/root/test/Python-3.6.8
abs_builddir=	/root/test/Python-3.6.8


CC=		gcc -pthread
CXX=		g++
MAINCC=		$(CC)
LINKCC=		$(PURIFY) $(MAINCC)
AR=		ar
READELF=	readelf
SOABI=		cpython-36m-x86_64-linux-gnu
LDVERSION=	$(VERSION)$(ABIFLAGS)
GITVERSION=	
GITTAG=		
GITBRANCH=	
PGO_PROF_GEN_FLAG=-fprofile-generate
PGO_PROF_USE_FLAG=-fprofile-use -fprofile-correction
LLVM_PROF_MERGER=true
LLVM_PROF_FILE=
LLVM_PROF_ERR=no
DTRACE=         
DFLAGS=         
DTRACE_HEADERS= 
DTRACE_OBJS=    

GNULD=		yes

# Shell used by make (some versions default to the login shell, which is bad)
SHELL=		/bin/sh

# Use this to make a link between python$(VERSION) and python in $(BINDIR)
LN=		ln

# Portable install script (configure doesn't always guess right)
INSTALL=	/usr/bin/install -c
INSTALL_PROGRAM=${INSTALL}
INSTALL_SCRIPT= ${INSTALL}
INSTALL_DATA=	${INSTALL} -m 644
# Shared libraries must be installed with executable mode on some systems;
# rather than figuring out exactly which, we always give them executable mode.
# Also, making them read-only seems to be a good idea...
INSTALL_SHARED= ${INSTALL} -m 555

MKDIR_P=	/bin/mkdir -p

MAKESETUP=      $(srcdir)/Modules/makesetup

# Compiler options
OPT=		-DNDEBUG -g -fwrapv -O3 -Wall
BASECFLAGS=	 -Wsign-compare
BASECPPFLAGS=	
CONFIGURE_CFLAGS=	
# CFLAGS_NODIST is used for building the interpreter and stdlib C extensions.
# Use it when a compiler flag should _not_ be part of the distutils CFLAGS
# once Python is installed (Issue #21121).
CONFIGURE_CFLAGS_NODIST= -std=c99 -Wextra -Wno-unused-parameter -Wno-missing-field-initializers
# LDFLAGS_NODIST is used in the same manner as CFLAGS_NODIST.
# Use it when a linker flag should _not_ be part of the distutils LDFLAGS
# once Python is installed (bpo-35257)
CONFIGURE_LDFLAGS_NODIST=
CONFIGURE_CPPFLAGS=	
CONFIGURE_LDFLAGS=	
# Avoid assigning CFLAGS, LDFLAGS, etc. so users can use them on the
# command line to append to these values without stomping the pre-set
# values.
PY_CFLAGS=	$(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS)
PY_CFLAGS_NODIST=$(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST)
# Both CPPFLAGS and LDFLAGS need to contain the shell's value for setup.py to
# be able to build extension modules using the directories specified in the
# environment variables
PY_CPPFLAGS=	$(BASECPPFLAGS) -I. -I$(srcdir)/Include $(CONFIGURE_CPPFLAGS) $(CPPFLAGS)
PY_LDFLAGS=	$(CONFIGURE_LDFLAGS) $(LDFLAGS)
PY_LDFLAGS_NODIST=$(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST)
NO_AS_NEEDED=	-Wl,--no-as-needed
LDLAST=		
SGI_ABI=	
CCSHARED=	-fPIC
LINKFORSHARED=	-Xlinker -export-dynamic
ARFLAGS=	rcs
# Extra C flags added for building the interpreter object files.
CFLAGSFORSHARED=
# C flags used for building the interpreter object files
PY_CORE_CFLAGS=	$(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS) $(CFLAGSFORSHARED) -DPy_BUILD_CORE
# Linker flags used for building the interpreter object files
PY_CORE_LDFLAGS=$(PY_LDFLAGS) $(PY_LDFLAGS_NODIST)
# Strict or non-strict aliasing flags used to compile dtoa.c, see above
CFLAGS_ALIASING=


# Machine-dependent subdirectories
MACHDEP=	linux

# Multiarch directory (may be empty)
MULTIARCH=	x86_64-linux-gnu
MULTIARCH_CPPFLAGS = -DMULTIARCH=\"x86_64-linux-gnu\"

# Install prefix for architecture-independent files
prefix=		/usr/local

# Install prefix for architecture-dependent files
exec_prefix=	${prefix}

# Install prefix for data files
datarootdir=    ${prefix}/share

# Expanded directories
BINDIR=		${exec_prefix}/bin
LIBDIR=		${exec_prefix}/lib
MANDIR=		${datarootdir}/man
INCLUDEDIR=	${prefix}/include
CONFINCLUDEDIR=	$(exec_prefix)/include
SCRIPTDIR=	$(prefix)/lib
ABIFLAGS=	m

# Detailed destination directories
BINLIBDEST=	$(LIBDIR)/python$(VERSION)
LIBDEST=	$(SCRIPTDIR)/python$(VERSION)
INCLUDEPY=	$(INCLUDEDIR)/python$(LDVERSION)
CONFINCLUDEPY=	$(CONFINCLUDEDIR)/python$(LDVERSION)

# Symbols used for using shared libraries
SHLIB_SUFFIX=	.so
EXT_SUFFIX=	.cpython-36m-x86_64-linux-gnu.so
LDSHARED=	$(CC) -shared $(PY_LDFLAGS)
BLDSHARED=	$(CC) -shared $(PY_CORE_LDFLAGS)
LDCXXSHARED=	$(CXX) -shared
DESTSHARED=	$(BINLIBDEST)/lib-dynload

# Executable suffix (.exe on Windows and Mac OS X)
EXE=		
BUILDEXE=	

# Short name and location for Mac OS X Python framework
UNIVERSALSDK=
PYTHONFRAMEWORK=	
PYTHONFRAMEWORKDIR=	no-framework
PYTHONFRAMEWORKPREFIX=	
PYTHONFRAMEWORKINSTALLDIR= 
# Deployment target selected during configure, to be checked
# by distutils. The export statement is needed to ensure that the
# deployment target is active during build.
MACOSX_DEPLOYMENT_TARGET=
#export MACOSX_DEPLOYMENT_TARGET

# Option to install to strip binaries
STRIPFLAG=-s

# Flags to lipo to produce a 32-bit-only universal executable
LIPO_32BIT_FLAGS=

# Options to enable prebinding (for fast startup prior to Mac OS X 10.3)
OTHER_LIBTOOL_OPT=

# Environment to run shared python without installed libraries
RUNSHARED=       

# ensurepip options
ENSUREPIP=      upgrade

# Modes for directories, executables and data files created by the
# install process.  Default to user-only-writable for all file types.
DIRMODE=	755
EXEMODE=	755
FILEMODE=	644

# configure script arguments
CONFIG_ARGS=	


# Subdirectories with code
SRCDIRS= 	Parser Objects Python Modules Programs

# Other subdirectories
SUBDIRSTOO=	Include Lib Misc

# Files and directories to be distributed
CONFIGFILES=	configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in
DISTFILES=	README ChangeLog $(CONFIGFILES)
DISTDIRS=	$(SUBDIRS) $(SUBDIRSTOO) Ext-dummy
DIST=		$(DISTFILES) $(DISTDIRS)


LIBRARY=	libpython$(VERSION)$(ABIFLAGS).a
LDLIBRARY=      libpython$(VERSION)$(ABIFLAGS).a
BLDLIBRARY=     $(LDLIBRARY)
PY3LIBRARY=     
DLLLIBRARY=	
LDLIBRARYDIR=   
INSTSONAME=	$(LDLIBRARY)


LIBS=		-lpthread -ldl  -lutil -lrt
LIBM=		-lm
LIBC=		
SYSLIBS=	$(LIBM) $(LIBC)
SHLIBS=		$(LIBS)

THREADOBJ=	Python/thread.o
DLINCLDIR=	.
DYNLOADFILE=	dynload_shlib.o
MACHDEP_OBJS=	
LIBOBJDIR=	Python/
LIBOBJS=	

PYTHON=		python$(EXE)
BUILDPYTHON=	python$(BUILDEXE)

PYTHON_FOR_REGEN=python
UPDATE_FILE=python $(srcdir)/Tools/scripts/update_file.py
PYTHON_FOR_BUILD=./$(BUILDPYTHON) -E
_PYTHON_HOST_PLATFORM=
BUILD_GNU_TYPE=	x86_64-pc-linux-gnu
HOST_GNU_TYPE=	x86_64-pc-linux-gnu

# Tcl and Tk config info from --with-tcltk-includes and -libs options
TCLTK_INCLUDES=	
TCLTK_LIBS=	

# The task to run while instrumented when building the profile-opt target.
# We exclude unittests with -x that take a rediculious amount of time to
# run in the instrumented training build or do not provide much value.
PROFILE_TASK=-m test.regrtest --pgo

# report files for gcov / lcov coverage report
COVERAGE_INFO=	$(abs_builddir)/coverage.info
COVERAGE_REPORT=$(abs_builddir)/lcov-report
COVERAGE_REPORT_OPTIONS=--no-branch-coverage --title "CPython lcov report"


# === Definitions added by makesetup ===

LOCALMODLIBS=                      
BASEMODLIBS=
PYTHONPATH=$(COREPYTHONPATH)
COREPYTHONPATH=$(DESTPATH)$(SITEPATH)$(TESTPATH)$(MACHDEPPATH)$(EXTRAMACHDEPPATH)
EXTRAMACHDEPPATH=
MACHDEPPATH=:$(PLATDIR)
TESTPATH=
SITEPATH=
DESTPATH=
MACHDESTLIB=$(BINLIBDEST)
DESTLIB=$(LIBDEST)



##########################################################################
# Modules
MODULE_OBJS=	\
		Modules/config.o \
		Modules/getpath.o \
		Modules/main.o \
		Modules/gcmodule.o

IO_H=		Modules/_io/_iomodule.h

IO_OBJS=	\
		Modules/_io/_iomodule.o \
		Modules/_io/iobase.o \
		Modules/_io/fileio.o \
		Modules/_io/bufferedio.o \
		Modules/_io/textio.o \
		Modules/_io/bytesio.o \
		Modules/_io/stringio.o

##########################################################################

LIBFFI_INCLUDEDIR=	

##########################################################################
# Parser
PGEN=		Parser/pgen$(EXE)

POBJS=		\
		Parser/acceler.o \
		Parser/grammar1.o \
		Parser/listnode.o \
		Parser/node.o \
		Parser/parser.o \
		Parser/bitset.o \
		Parser/metagrammar.o \
		Parser/firstsets.o \
		Parser/grammar.o \
		Parser/pgen.o

PARSER_OBJS=	$(POBJS) Parser/myreadline.o Parser/parsetok.o Parser/tokenizer.o

PGOBJS=		\
		Objects/obmalloc.o \
		Python/dynamic_annotations.o \
		Python/mysnprintf.o \
		Python/pyctype.o \
		Parser/tokenizer_pgen.o \
		Parser/printgrammar.o \
		Parser/parsetok_pgen.o \
		Parser/pgenmain.o

PARSER_HEADERS= \
		$(srcdir)/Parser/parser.h \
		$(srcdir)/Include/parsetok.h \
		$(srcdir)/Parser/tokenizer.h

PGENOBJS=	$(POBJS) $(PGOBJS)

##########################################################################
# Python

PYTHON_OBJS=	\
		Python/_warnings.o \
		Python/Python-ast.o \
		Python/asdl.o \
		Python/ast.o \
		Python/bltinmodule.o \
		Python/ceval.o \
		Python/compile.o \
		Python/codecs.o \
		Python/dynamic_annotations.o \
		Python/errors.o \
		Python/frozenmain.o \
		Python/future.o \
		Python/getargs.o \
		Python/getcompiler.o \
		Python/getcopyright.o \
		Python/getplatform.o \
		Python/getversion.o \
		Python/graminit.o \
		Python/import.o \
		Python/importdl.o \
		Python/marshal.o \
		Python/modsupport.o \
		Python/mystrtoul.o \
		Python/mysnprintf.o \
		Python/peephole.o \
		Python/pyarena.o \
		Python/pyctype.o \
		Python/pyfpe.o \
		Python/pyhash.o \
		Python/pylifecycle.o \
		Python/pymath.o \
		Python/pystate.o \
		Python/pythonrun.o \
		Python/pytime.o \
		Python/random.o \
		Python/structmember.o \
		Python/symtable.o \
		Python/sysmodule.o \
		Python/traceback.o \
		Python/getopt.o \
		Python/pystrcmp.o \
		Python/pystrtod.o \
		Python/pystrhex.o \
		Python/dtoa.o \
		Python/formatter_unicode.o \
		Python/fileutils.o \
		Python/$(DYNLOADFILE) \
		$(LIBOBJS) \
		$(MACHDEP_OBJS) \
		$(THREADOBJ) \
		$(DTRACE_OBJS)


##########################################################################
# Objects
OBJECT_OBJS=	\
		Objects/abstract.o \
		Objects/accu.o \
		Objects/boolobject.o \
		Objects/bytes_methods.o \
		Objects/bytearrayobject.o \
		Objects/bytesobject.o \
		Objects/cellobject.o \
		Objects/classobject.o \
		Objects/codeobject.o \
		Objects/complexobject.o \
		Objects/descrobject.o \
		Objects/enumobject.o \
		Objects/exceptions.o \
		Objects/genobject.o \
		Objects/fileobject.o \
		Objects/floatobject.o \
		Objects/frameobject.o \
		Objects/funcobject.o \
		Objects/iterobject.o \
		Objects/listobject.o \
		Objects/longobject.o \
		Objects/dictobject.o \
		Objects/odictobject.o \
		Objects/memoryobject.o \
		Objects/methodobject.o \
		Objects/moduleobject.o \
		Objects/namespaceobject.o \
		Objects/object.o \
		Objects/obmalloc.o \
		Objects/capsule.o \
		Objects/rangeobject.o \
		Objects/setobject.o \
		Objects/sliceobject.o \
		Objects/structseq.o \
		Objects/tupleobject.o \
		Objects/typeobject.o \
		Objects/unicodeobject.o \
		Objects/unicodectype.o \
		Objects/weakrefobject.o

##########################################################################
# objects that get linked into the Python library
LIBRARY_OBJS_OMIT_FROZEN=	\
		Modules/getbuildinfo.o \
		$(PARSER_OBJS) \
		$(OBJECT_OBJS) \
		$(PYTHON_OBJS) \
		$(MODULE_OBJS) \
		$(MODOBJS)

LIBRARY_OBJS=	\
		$(LIBRARY_OBJS_OMIT_FROZEN) \
		Python/frozen.o

##########################################################################
# DTrace

# On some systems, object files that reference DTrace probes need to be modified
# in-place by dtrace(1).
DTRACE_DEPS = \
	Python/ceval.o
# XXX: should gcmodule, etc. be here, too?

#########################################################################
# Rules

# Default target
all:		build_all
build_all:	check-clean-src $(BUILDPYTHON) oldsharedmods sharedmods gdbhooks \
		Programs/_testembed python-config

# Check that the source is clean when building out of source.
check-clean-src:
	@if test -n "$(VPATH)" -a -f "$(srcdir)/Programs/python.o"; then \
		echo "Error: The source directory ($(srcdir)) is not clean" ; \
		echo "Building Python out of the source tree (in $(abs_builddir)) requires a clean source tree ($(abs_srcdir))" ; \
		echo "Try to run: make -C \"$(srcdir)\" clean" ; \
		exit 1; \
	fi

# Compile a binary with profile guided optimization.
profile-opt:
	@if [ $(LLVM_PROF_ERR) = yes ]; then \
		echo "Error: Cannot perform PGO build because llvm-profdata was not found in PATH" ;\
		echo "Please add it to PATH and run ./configure again" ;\
		exit 1;\
	fi
	@echo "Building with support for profile generation:"
	$(MAKE) clean
	$(MAKE) profile-removal
	$(MAKE) build_all_generate_profile
	$(MAKE) profile-removal
	@echo "Running code to generate profile data (this can take a while):"
	$(MAKE) run_profile_task
	$(MAKE) build_all_merge_profile
	@echo "Rebuilding with profile guided optimizations:"
	$(MAKE) clean
	$(MAKE) build_all_use_profile
	$(MAKE) profile-removal

build_all_generate_profile:
	$(MAKE) all CFLAGS_NODIST="$(CFLAGS_NODIST) $(PGO_PROF_GEN_FLAG)" LDFLAGS_NODIST="$(LDFLAGS_NODIST) $(PGO_PROF_GEN_FLAG)" LIBS="$(LIBS)"

run_profile_task:
	: # FIXME: can't run for a cross build
	$(LLVM_PROF_FILE) $(RUNSHARED) ./$(BUILDPYTHON) $(PROFILE_TASK) || true

build_all_merge_profile:
	$(LLVM_PROF_MERGER)

build_all_use_profile:
	$(MAKE) all CFLAGS_NODIST="$(CFLAGS_NODIST) $(PGO_PROF_USE_FLAG)" LDFLAGS_NODIST="$(LDFLAGS_NODIST)"

# Compile and run with gcov
.PHONY=coverage coverage-lcov coverage-report
coverage:
	@echo "Building with support for coverage checking:"
	$(MAKE) clean profile-removal
	$(MAKE) all CFLAGS="$(CFLAGS) -O0 -pg -fprofile-arcs -ftest-coverage" LIBS="$(LIBS) -lgcov"

coverage-lcov:
	@echo "Creating Coverage HTML report with LCOV:"
	@rm -f $(COVERAGE_INFO)
	@rm -rf $(COVERAGE_REPORT)
	@lcov --capture --directory $(abs_builddir) \
	    --base-directory $(realpath $(abs_builddir)) \
	    --path $(realpath $(abs_srcdir)) \
	    --output-file $(COVERAGE_INFO)
	: # remove 3rd party modules, system headers and internal files with
	: # debug, test or dummy functions.
	@lcov --remove $(COVERAGE_INFO) \
	    '*/Modules/_blake2/impl/*' \
	    '*/Modules/_ctypes/libffi*/*' \
	    '*/Modules/_decimal/libmpdec/*' \
	    '*/Modules/_sha3/kcp/*' \
	    '*/Modules/expat/*' \
	    '*/Modules/zlib/*' \
	    '*/Include/*' \
	    '*/Modules/xx*.c' \
	    '*/Parser/listnode.c' \
	    '*/Python/pyfpe.c' \
	    '*/Python/pystrcmp.c' \
	    '/usr/include/*' \
	    '/usr/local/include/*' \
	    '/usr/lib/gcc/*' \
	    --output-file $(COVERAGE_INFO)
	@genhtml $(COVERAGE_INFO) --output-directory $(COVERAGE_REPORT) \
	    $(COVERAGE_REPORT_OPTIONS)
	@echo
	@echo "lcov report at $(COVERAGE_REPORT)/index.html"
	@echo

# Force regeneration of parser and importlib
coverage-report: regen-grammar regen-importlib
	: # force rebuilding of parser and importlib
	@touch $(GRAMMAR_INPUT)
	@touch $(srcdir)/Lib/importlib/_bootstrap.py
	@touch $(srcdir)/Lib/importlib/_bootstrap_external.py
	: # build with coverage info
	$(MAKE) coverage
	: # run tests, ignore failures
	$(TESTRUNNER) $(TESTOPTS) || true
	: # build lcov report
	$(MAKE) coverage-lcov

# Run "Argument Clinic" over all source files
.PHONY=clinic
clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c
	$(PYTHON_FOR_REGEN) ./Tools/clinic/clinic.py --make

# Build the interpreter
$(BUILDPYTHON):	Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY)
	$(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)

platform: $(BUILDPYTHON) pybuilddir.txt
	$(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print("%s-%d.%d" % (get_platform(), *sys.version_info[:2]))' >platform

# Create build directory and generate the sysconfig build-time data there.
# pybuilddir.txt contains the name of the build dir and is used for
# sys.path fixup -- see Modules/getpath.c.
# Since this step runs before shared modules are built, try to avoid bootstrap
# problems by creating a dummy pybuilddir.txt just to allow interpreter
# initialization to succeed.  It will be overwritten by generate-posix-vars
# or removed in case of failure.
pybuilddir.txt: $(BUILDPYTHON)
	@echo "none" > ./pybuilddir.txt
	$(RUNSHARED) $(PYTHON_FOR_BUILD) -S -m sysconfig --generate-posix-vars ;\
	if test $$? -ne 0 ; then \
		echo "generate-posix-vars failed" ; \
		rm -f ./pybuilddir.txt ; \
		exit 1 ; \
	fi

# This is shared by the math and cmath modules
Modules/_math.o: Modules/_math.c Modules/_math.h
	$(CC) -c $(CCSHARED) $(PY_CORE_CFLAGS) -o $@ $<

# blake2s is auto-generated from blake2b
$(srcdir)/Modules/_blake2/blake2s_impl.c: $(srcdir)/Modules/_blake2/blake2b_impl.c $(srcdir)/Modules/_blake2/blake2b2s.py
	$(PYTHON_FOR_REGEN) $(srcdir)/Modules/_blake2/blake2b2s.py
	$(PYTHON_FOR_REGEN) $(srcdir)/Tools/clinic/clinic.py -f $@

# Build the shared modules
# Under GNU make, MAKEFLAGS are sorted and normalized; the 's' for
# -s, --silent or --quiet is always the first char.
# Under BSD make, MAKEFLAGS might be " -s -v x=y".
# Ignore macros passed by GNU make, passed after --
sharedmods: $(BUILDPYTHON) pybuilddir.txt Modules/_math.o
	@case "`echo X $$MAKEFLAGS | sed 's/^X //;s/ -- .*//'`" in \
	    *\ -s*|s*) quiet="-q";; \
	    *) quiet="";; \
	esac; \
	echo "$(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' \
		_TCLTK_INCLUDES='$(TCLTK_INCLUDES)' _TCLTK_LIBS='$(TCLTK_LIBS)' \
		$(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build"; \
	$(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' \
		_TCLTK_INCLUDES='$(TCLTK_INCLUDES)' _TCLTK_LIBS='$(TCLTK_LIBS)' \
		$(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build


# Build static library
$(LIBRARY): $(LIBRARY_OBJS)
	-rm -f $@
	$(AR) $(ARFLAGS) $@ $(LIBRARY_OBJS)

libpython$(LDVERSION).so: $(LIBRARY_OBJS)
	if test $(INSTSONAME) != $(LDLIBRARY); then \
		$(BLDSHARED) -Wl,-h$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \
		$(LN) -f $(INSTSONAME) $@; \
	else \
		$(BLDSHARED) -o $@ $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \
	fi

libpython3.so:	libpython$(LDVERSION).so
	$(BLDSHARED) $(NO_AS_NEEDED) -o $@ -Wl,-h$@ $^

libpython$(LDVERSION).dylib: $(LIBRARY_OBJS)
	 $(CC) -dynamiclib -Wl,-single_module $(PY_CORE_LDFLAGS) -undefined dynamic_lookup -Wl,-install_name,$(prefix)/lib/libpython$(LDVERSION).dylib -Wl,-compatibility_version,$(VERSION) -Wl,-current_version,$(VERSION) -o $@ $(LIBRARY_OBJS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \


libpython$(VERSION).sl: $(LIBRARY_OBJS)
	$(LDSHARED) -o $@ $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST)

# Copy up the gdb python hooks into a position where they can be automatically
# loaded by gdb during Lib/test/test_gdb.py
#
# Distributors are likely to want to install this somewhere else e.g. relative
# to the stripped DWARF data for the shared library.
gdbhooks: $(BUILDPYTHON)-gdb.py

SRC_GDB_HOOKS=$(srcdir)/Tools/gdb/libpython.py
$(BUILDPYTHON)-gdb.py: $(SRC_GDB_HOOKS)
	$(INSTALL_DATA) $(SRC_GDB_HOOKS) $(BUILDPYTHON)-gdb.py

# This rule is here for OPENSTEP/Rhapsody/MacOSX. It builds a temporary
# minimal framework (not including the Lib directory and such) in the current
# directory.
RESSRCDIR=Mac/Resources/framework
$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK): \
		$(LIBRARY) \
		$(RESSRCDIR)/Info.plist
	$(INSTALL) -d -m $(DIRMODE) $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)
	$(CC) -o $(LDLIBRARY) $(PY_CORE_LDFLAGS) -dynamiclib \
		-all_load $(LIBRARY) -Wl,-single_module \
		-install_name $(DESTDIR)$(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK) \
		-compatibility_version $(VERSION) \
		-current_version $(VERSION) \
		-framework CoreFoundation $(LIBS);
	$(INSTALL) -d -m $(DIRMODE)  \
		$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/Resources/English.lproj
	$(INSTALL_DATA) $(RESSRCDIR)/Info.plist \
		$(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/Resources/Info.plist
	$(LN) -fsn $(VERSION) $(PYTHONFRAMEWORKDIR)/Versions/Current
	$(LN) -fsn Versions/Current/$(PYTHONFRAMEWORK) $(PYTHONFRAMEWORKDIR)/$(PYTHONFRAMEWORK)
	$(LN) -fsn Versions/Current/Resources $(PYTHONFRAMEWORKDIR)/Resources

# This rule builds the Cygwin Python DLL and import library if configured
# for a shared core library; otherwise, this rule is a noop.
$(DLLLIBRARY) libpython$(VERSION).dll.a: $(LIBRARY_OBJS)
	if test -n "$(DLLLIBRARY)"; then \
		$(LDSHARED) -Wl,--out-implib=$@ -o $(DLLLIBRARY) $^ \
			$(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST); \
	else true; \
	fi


oldsharedmods: $(SHAREDMODS)


Makefile Modules/config.c: Makefile.pre \
				$(srcdir)/Modules/config.c.in \
				$(MAKESETUP) \
				Modules/Setup.config \
				Modules/Setup \
				Modules/Setup.local
	$(SHELL) $(MAKESETUP) -c $(srcdir)/Modules/config.c.in \
				-s Modules \
				Modules/Setup.config \
				Modules/Setup.local \
				Modules/Setup
	@mv config.c Modules
	@echo "The Makefile was updated, you may need to re-run make."


Modules/Setup: $(srcdir)/Modules/Setup.dist
	@if test -f Modules/Setup; then \
		echo "-----------------------------------------------"; \
		echo "Modules/Setup.dist is newer than Modules/Setup;"; \
		echo "check to make sure you have all the updates you"; \
		echo "need in your Modules/Setup file."; \
		echo "Usually, copying Modules/Setup.dist to Modules/Setup will work."; \
		echo "-----------------------------------------------"; \
	fi

Programs/_testembed: Programs/_testembed.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY)
	$(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/_testembed.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)

############################################################################
# Importlib

Programs/_freeze_importlib.o: Programs/_freeze_importlib.c Makefile

Programs/_freeze_importlib: Programs/_freeze_importlib.o $(LIBRARY_OBJS_OMIT_FROZEN)
	$(LINKCC) $(PY_CORE_LDFLAGS) -o $@ Programs/_freeze_importlib.o $(LIBRARY_OBJS_OMIT_FROZEN) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)

.PHONY: regen-importlib
regen-importlib: Programs/_freeze_importlib
	# Regenerate Python/importlib_external.h
	# from Lib/importlib/_bootstrap_external.py using _freeze_importlib
	./Programs/_freeze_importlib \
	    $(srcdir)/Lib/importlib/_bootstrap_external.py \
	    $(srcdir)/Python/importlib_external.h.new
	$(UPDATE_FILE) $(srcdir)/Python/importlib_external.h $(srcdir)/Python/importlib_external.h.new
	# Regenerate Python/importlib.h from Lib/importlib/_bootstrap.py
	# using _freeze_importlib
	./Programs/_freeze_importlib \
	    $(srcdir)/Lib/importlib/_bootstrap.py \
	    $(srcdir)/Python/importlib.h.new
	$(UPDATE_FILE) $(srcdir)/Python/importlib.h $(srcdir)/Python/importlib.h.new


############################################################################
# Regenerate all generated files

regen-all: regen-opcode regen-opcode-targets regen-typeslots regen-grammar \
	regen-ast regen-importlib clinic

############################################################################
# Special rules for object files

Modules/getbuildinfo.o: $(PARSER_OBJS) \
		$(OBJECT_OBJS) \
		$(PYTHON_OBJS) \
		$(MODULE_OBJS) \
		$(MODOBJS) \
		$(srcdir)/Modules/getbuildinfo.c
	$(CC) -c $(PY_CORE_CFLAGS) \
	      -DGITVERSION="\"`LC_ALL=C $(GITVERSION)`\"" \
	      -DGITTAG="\"`LC_ALL=C $(GITTAG)`\"" \
	      -DGITBRANCH="\"`LC_ALL=C $(GITBRANCH)`\"" \
	      -o $@ $(srcdir)/Modules/getbuildinfo.c

Modules/getpath.o: $(srcdir)/Modules/getpath.c Makefile
	$(CC) -c $(PY_CORE_CFLAGS) -DPYTHONPATH='"$(PYTHONPATH)"' \
		-DPREFIX='"$(prefix)"' \
		-DEXEC_PREFIX='"$(exec_prefix)"' \
		-DVERSION='"$(VERSION)"' \
		-DVPATH='"$(VPATH)"' \
		-o $@ $(srcdir)/Modules/getpath.c

Programs/python.o: $(srcdir)/Programs/python.c
	$(MAINCC) -c $(PY_CORE_CFLAGS) -o $@ $(srcdir)/Programs/python.c

Programs/_testembed.o: $(srcdir)/Programs/_testembed.c
	$(MAINCC) -c $(PY_CORE_CFLAGS) -o $@ $(srcdir)/Programs/_testembed.c

Modules/_sre.o: $(srcdir)/Modules/_sre.c $(srcdir)/Modules/sre.h $(srcdir)/Modules/sre_constants.h $(srcdir)/Modules/sre_lib.h

Modules/posixmodule.o: $(srcdir)/Modules/posixmodule.c $(srcdir)/Modules/posixmodule.h

Modules/grpmodule.o: $(srcdir)/Modules/grpmodule.c $(srcdir)/Modules/posixmodule.h

Modules/pwdmodule.o: $(srcdir)/Modules/pwdmodule.c $(srcdir)/Modules/posixmodule.h

Modules/signalmodule.o: $(srcdir)/Modules/signalmodule.c $(srcdir)/Modules/posixmodule.h

Python/dynload_shlib.o: $(srcdir)/Python/dynload_shlib.c Makefile
	$(CC) -c $(PY_CORE_CFLAGS) \
		-DSOABI='"$(SOABI)"' \
		-o $@ $(srcdir)/Python/dynload_shlib.c

Python/dynload_hpux.o: $(srcdir)/Python/dynload_hpux.c Makefile
	$(CC) -c $(PY_CORE_CFLAGS) \
		-DSHLIB_EXT='"$(EXT_SUFFIX)"' \
		-o $@ $(srcdir)/Python/dynload_hpux.c

Python/sysmodule.o: $(srcdir)/Python/sysmodule.c Makefile
	$(CC) -c $(PY_CORE_CFLAGS) \
		-DABIFLAGS='"$(ABIFLAGS)"' \
		$(MULTIARCH_CPPFLAGS) \
		-o $@ $(srcdir)/Python/sysmodule.c

$(IO_OBJS): $(IO_H)

$(PGEN): $(PGENOBJS)
		$(CC) $(OPT) $(PY_CORE_LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN)

.PHONY: regen-grammar
regen-grammar: $(PGEN)
	# Regenerate Include/graminit.h and Python/graminit.c
	# from Grammar/Grammar using pgen
	@$(MKDIR_P) Include
	$(PGEN) $(srcdir)/Grammar/Grammar \
		$(srcdir)/Include/graminit.h.new \
		$(srcdir)/Python/graminit.c.new
	$(UPDATE_FILE) $(srcdir)/Include/graminit.h $(srcdir)/Include/graminit.h.new
	$(UPDATE_FILE) $(srcdir)/Python/graminit.c $(srcdir)/Python/graminit.c.new

Parser/grammar.o:	$(srcdir)/Parser/grammar.c \
				$(srcdir)/Include/token.h \
				$(srcdir)/Include/grammar.h
Parser/metagrammar.o:	$(srcdir)/Parser/metagrammar.c

Parser/tokenizer_pgen.o:	$(srcdir)/Parser/tokenizer.c
Parser/parsetok_pgen.o:	$(srcdir)/Parser/parsetok.c
Parser/printgrammar.o: $(srcdir)/Parser/printgrammar.c

Parser/pgenmain.o:	$(srcdir)/Include/parsetok.h

.PHONY=regen-ast
regen-ast:
	# Regenerate Include/Python-ast.h using Parser/asdl_c.py -h
	$(MKDIR_P) $(srcdir)/Include
	$(PYTHON_FOR_REGEN) $(srcdir)/Parser/asdl_c.py \
		-h $(srcdir)/Include/Python-ast.h.new \
		$(srcdir)/Parser/Python.asdl
	$(UPDATE_FILE) $(srcdir)/Include/Python-ast.h $(srcdir)/Include/Python-ast.h.new
	# Regenerate Python/Python-ast.c using Parser/asdl_c.py -c
	$(MKDIR_P) $(srcdir)/Python
	$(PYTHON_FOR_REGEN) $(srcdir)/Parser/asdl_c.py \
		-c $(srcdir)/Python/Python-ast.c.new \
		$(srcdir)/Parser/Python.asdl
	$(UPDATE_FILE) $(srcdir)/Python/Python-ast.c $(srcdir)/Python/Python-ast.c.new

.PHONY: regen-opcode
regen-opcode:
	# Regenerate Include/opcode.h from Lib/opcode.py
	# using Tools/scripts/generate_opcode_h.py
	$(PYTHON_FOR_REGEN) $(srcdir)/Tools/scripts/generate_opcode_h.py \
		$(srcdir)/Lib/opcode.py \
		$(srcdir)/Include/opcode.h.new
	$(UPDATE_FILE) $(srcdir)/Include/opcode.h $(srcdir)/Include/opcode.h.new

Python/compile.o Python/symtable.o Python/ast.o: $(srcdir)/Include/graminit.h $(srcdir)/Include/Python-ast.h

Python/getplatform.o: $(srcdir)/Python/getplatform.c
		$(CC) -c $(PY_CORE_CFLAGS) -DPLATFORM='"$(MACHDEP)"' -o $@ $(srcdir)/Python/getplatform.c

Python/importdl.o: $(srcdir)/Python/importdl.c
		$(CC) -c $(PY_CORE_CFLAGS) -I$(DLINCLDIR) -o $@ $(srcdir)/Python/importdl.c

Objects/unicodectype.o:	$(srcdir)/Objects/unicodectype.c \
				$(srcdir)/Objects/unicodetype_db.h

BYTESTR_DEPS = \
		$(srcdir)/Objects/stringlib/count.h \
		$(srcdir)/Objects/stringlib/ctype.h \
		$(srcdir)/Objects/stringlib/fastsearch.h \
		$(srcdir)/Objects/stringlib/find.h \
		$(srcdir)/Objects/stringlib/join.h \
		$(srcdir)/Objects/stringlib/partition.h \
		$(srcdir)/Objects/stringlib/split.h \
		$(srcdir)/Objects/stringlib/stringdefs.h \
		$(srcdir)/Objects/stringlib/transmogrify.h

UNICODE_DEPS = \
		$(srcdir)/Objects/stringlib/asciilib.h \
		$(srcdir)/Objects/stringlib/codecs.h \
		$(srcdir)/Objects/stringlib/count.h \
		$(srcdir)/Objects/stringlib/fastsearch.h \
		$(srcdir)/Objects/stringlib/find.h \
		$(srcdir)/Objects/stringlib/find_max_char.h \
		$(srcdir)/Objects/stringlib/localeutil.h \
		$(srcdir)/Objects/stringlib/partition.h \
		$(srcdir)/Objects/stringlib/replace.h \
		$(srcdir)/Objects/stringlib/split.h \
		$(srcdir)/Objects/stringlib/ucs1lib.h \
		$(srcdir)/Objects/stringlib/ucs2lib.h \
		$(srcdir)/Objects/stringlib/ucs4lib.h \
		$(srcdir)/Objects/stringlib/undef.h \
		$(srcdir)/Objects/stringlib/unicode_format.h \
		$(srcdir)/Objects/stringlib/unicodedefs.h

Objects/bytes_methods.o: $(srcdir)/Objects/bytes_methods.c $(BYTESTR_DEPS)
Objects/bytesobject.o: $(srcdir)/Objects/bytesobject.c $(BYTESTR_DEPS)
Objects/bytearrayobject.o: $(srcdir)/Objects/bytearrayobject.c $(BYTESTR_DEPS)

Objects/unicodeobject.o: $(srcdir)/Objects/unicodeobject.c $(UNICODE_DEPS)

Objects/odictobject.o: $(srcdir)/Objects/dict-common.h
Objects/dictobject.o: $(srcdir)/Objects/stringlib/eq.h $(srcdir)/Objects/dict-common.h
Objects/setobject.o: $(srcdir)/Objects/stringlib/eq.h

.PHONY: regen-opcode-targets
regen-opcode-targets:
	# Regenerate Python/opcode_targets.h from Lib/opcode.py
	# using Python/makeopcodetargets.py
	$(PYTHON_FOR_REGEN) $(srcdir)/Python/makeopcodetargets.py \
		$(srcdir)/Python/opcode_targets.h.new
	$(UPDATE_FILE) $(srcdir)/Python/opcode_targets.h $(srcdir)/Python/opcode_targets.h.new

Python/ceval.o: $(srcdir)/Python/opcode_targets.h $(srcdir)/Python/ceval_gil.h

Python/frozen.o: $(srcdir)/Python/importlib.h $(srcdir)/Python/importlib_external.h

# Generate DTrace probe macros, then rename them (PYTHON_ -> PyDTrace_) to
# follow our naming conventions. dtrace(1) uses the output filename to generate
# an include guard, so we can't use a pipeline to transform its output.
Include/pydtrace_probes.h: $(srcdir)/Include/pydtrace.d
	$(MKDIR_P) Include
	$(DTRACE) $(DFLAGS) -o $@ -h -s $<
	: sed in-place edit with POSIX-only tools
	sed 's/PYTHON_/PyDTrace_/' $@ > $@.tmp
	mv $@.tmp $@

Python/pydtrace.o: $(srcdir)/Include/pydtrace.d $(DTRACE_DEPS)
	$(DTRACE) $(DFLAGS) -o $@ -G -s $< $(DTRACE_DEPS)

Objects/typeobject.o: Objects/typeslots.inc

.PHONY: regen-typeslots
regen-typeslots:
	# Regenerate Objects/typeslots.inc from Include/typeslotsh
	# using Objects/typeslots.py
	$(PYTHON_FOR_REGEN) $(srcdir)/Objects/typeslots.py \
		< $(srcdir)/Include/typeslots.h \
		$(srcdir)/Objects/typeslots.inc.new
	$(UPDATE_FILE) $(srcdir)/Objects/typeslots.inc $(srcdir)/Objects/typeslots.inc.new

############################################################################
# Header files

PYTHON_HEADERS= \
		$(srcdir)/Include/Python.h \
		$(srcdir)/Include/abstract.h \
		$(srcdir)/Include/accu.h \
		$(srcdir)/Include/asdl.h \
		$(srcdir)/Include/ast.h \
		$(srcdir)/Include/bltinmodule.h \
		$(srcdir)/Include/bitset.h \
		$(srcdir)/Include/boolobject.h \
		$(srcdir)/Include/bytes_methods.h \
		$(srcdir)/Include/bytearrayobject.h \
		$(srcdir)/Include/bytesobject.h \
		$(srcdir)/Include/cellobject.h \
		$(srcdir)/Include/ceval.h \
		$(srcdir)/Include/classobject.h \
		$(srcdir)/Include/code.h \
		$(srcdir)/Include/codecs.h \
		$(srcdir)/Include/compile.h \
		$(srcdir)/Include/complexobject.h \
		$(srcdir)/Include/descrobject.h \
		$(srcdir)/Include/dictobject.h \
		$(srcdir)/Include/dtoa.h \
		$(srcdir)/Include/dynamic_annotations.h \
		$(srcdir)/Include/enumobject.h \
		$(srcdir)/Include/errcode.h \
		$(srcdir)/Include/eval.h \
		$(srcdir)/Include/fileobject.h \
		$(srcdir)/Include/fileutils.h \
		$(srcdir)/Include/floatobject.h \
		$(srcdir)/Include/frameobject.h \
		$(srcdir)/Include/funcobject.h \
		$(srcdir)/Include/genobject.h \
		$(srcdir)/Include/import.h \
		$(srcdir)/Include/intrcheck.h \
		$(srcdir)/Include/iterobject.h \
		$(srcdir)/Include/listobject.h \
		$(srcdir)/Include/longintrepr.h \
		$(srcdir)/Include/longobject.h \
		$(srcdir)/Include/marshal.h \
		$(srcdir)/Include/memoryobject.h \
		$(srcdir)/Include/metagrammar.h \
		$(srcdir)/Include/methodobject.h \
		$(srcdir)/Include/modsupport.h \
		$(srcdir)/Include/moduleobject.h \
		$(srcdir)/Include/namespaceobject.h \
		$(srcdir)/Include/node.h \
		$(srcdir)/Include/object.h \
		$(srcdir)/Include/objimpl.h \
		$(srcdir)/Include/opcode.h \
		$(srcdir)/Include/osdefs.h \
		$(srcdir)/Include/osmodule.h \
		$(srcdir)/Include/patchlevel.h \
		$(srcdir)/Include/pgen.h \
		$(srcdir)/Include/pgenheaders.h \
		$(srcdir)/Include/pyarena.h \
		$(srcdir)/Include/pyatomic.h \
		$(srcdir)/Include/pycapsule.h \
		$(srcdir)/Include/pyctype.h \
		$(srcdir)/Include/pydebug.h \
		$(srcdir)/Include/pydtrace.h \
		$(srcdir)/Include/pyerrors.h \
		$(srcdir)/Include/pyfpe.h \
		$(srcdir)/Include/pyhash.h \
		$(srcdir)/Include/pylifecycle.h \
		$(srcdir)/Include/pymath.h \
		$(srcdir)/Include/pygetopt.h \
		$(srcdir)/Include/pymacro.h \
		$(srcdir)/Include/pymem.h \
		$(srcdir)/Include/pyport.h \
		$(srcdir)/Include/pystate.h \
		$(srcdir)/Include/pystrcmp.h \
		$(srcdir)/Include/pystrtod.h \
		$(srcdir)/Include/pystrhex.h \
		$(srcdir)/Include/pythonrun.h \
		$(srcdir)/Include/pythread.h \
		$(srcdir)/Include/pytime.h \
		$(srcdir)/Include/rangeobject.h \
		$(srcdir)/Include/setobject.h \
		$(srcdir)/Include/sliceobject.h \
		$(srcdir)/Include/structmember.h \
		$(srcdir)/Include/structseq.h \
		$(srcdir)/Include/symtable.h \
		$(srcdir)/Include/sysmodule.h \
		$(srcdir)/Include/traceback.h \
		$(srcdir)/Include/tupleobject.h \
		$(srcdir)/Include/ucnhash.h \
		$(srcdir)/Include/unicodeobject.h \
		$(srcdir)/Include/warnings.h \
		$(srcdir)/Include/weakrefobject.h \
		pyconfig.h \
		$(PARSER_HEADERS) \
		$(srcdir)/Include/Python-ast.h \
		$(DTRACE_HEADERS)

$(LIBRARY_OBJS) $(MODOBJS) Programs/python.o: $(PYTHON_HEADERS)


######################################################################

TESTOPTS=	$(EXTRATESTOPTS)
TESTPYTHON=	$(RUNSHARED) ./$(BUILDPYTHON) $(TESTPYTHONOPTS)
TESTRUNNER=	$(TESTPYTHON) $(srcdir)/Tools/scripts/run_tests.py
TESTTIMEOUT=	1200

.PHONY: test testall testuniversal buildbottest pythoninfo

# Run a basic set of regression tests.
# This excludes some tests that are particularly resource-intensive.
test:		all platform
		$(TESTRUNNER) $(TESTOPTS)

# Run the full test suite twice - once without .pyc files, and once with.
# In the past, we've had problems where bugs in the marshalling or
# elsewhere caused bytecode read from .pyc files to behave differently
# than bytecode generated directly from a .py source file.  Sometimes
# the bytecode read from a .pyc file had the bug, sometimes the directly
# generated bytecode.  This is sometimes a very shy bug needing a lot of
# sample data.
testall:	all platform
		-find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f
		$(TESTPYTHON) -E $(srcdir)/Lib/compileall.py
		-find $(srcdir)/Lib -name '*.py[co]' -print | xargs rm -f
		-$(TESTRUNNER) -u all $(TESTOPTS)
		$(TESTRUNNER) -u all $(TESTOPTS)

# Run the test suite for both architectures in a Universal build on OSX.
# Must be run on an Intel box.
testuniversal:	all platform
		if [ `arch` != 'i386' ];then \
			echo "This can only be used on OSX/i386" ;\
			exit 1 ;\
		fi
		$(TESTRUNNER) -u all $(TESTOPTS)
		$(RUNSHARED) /usr/libexec/oah/translate \
			./$(BUILDPYTHON) -E -m test -j 0 -u all $(TESTOPTS)

# Like testall, but with only one pass and without multiple processes.
# Run an optional script to include information about the build environment.
buildbottest:	build_all platform
		-@if which pybuildbot.identify >/dev/null 2>&1; then \
			pybuildbot.identify "CC='$(CC)'" "CXX='$(CXX)'"; \
		fi
		$(TESTRUNNER) -j 1 -u all -W --slowest --timeout=$(TESTTIMEOUT) $(TESTOPTS)

pythoninfo: build_all
		$(RUNSHARED) ./$(BUILDPYTHON) -m test.pythoninfo

QUICKTESTOPTS=	$(TESTOPTS) -x test_subprocess test_io test_lib2to3 \
		test_multibytecodec test_urllib2_localnet test_itertools \
		test_multiprocessing_fork test_multiprocessing_spawn \
		test_multiprocessing_forkserver \
		test_mailbox test_socket test_poll \
		test_select test_zipfile test_concurrent_futures
quicktest:	all platform
		$(TESTRUNNER) $(QUICKTESTOPTS)

# SSL tests
.PHONY: multisslcompile multissltest
multisslcompile: build_all
	$(RUNSHARED) ./$(BUILDPYTHON) Tools/ssl/multissltests.py --compile-only

multissltest: build_all
	$(RUNSHARED) ./$(BUILDPYTHON) Tools/ssl/multissltests.py

install:  commoninstall bininstall maninstall 
	if test "x$(ENSUREPIP)" != "xno"  ; then \
		case $(ENSUREPIP) in \
			upgrade) ensurepip="--upgrade" ;; \
			install|*) ensurepip="" ;; \
		esac; \
		$(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \
			$$ensurepip --root=$(DESTDIR)/ ; \
	fi

altinstall: commoninstall
	if test "x$(ENSUREPIP)" != "xno"  ; then \
		case $(ENSUREPIP) in \
			upgrade) ensurepip="--altinstall --upgrade" ;; \
			install|*) ensurepip="--altinstall" ;; \
		esac; \
		$(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \
			$$ensurepip --root=$(DESTDIR)/ ; \
	fi

commoninstall:  check-clean-src  \
		altbininstall libinstall inclinstall libainstall \
		sharedinstall oldsharedinstall altmaninstall \
		

# Install shared libraries enabled by Setup
DESTDIRS=	$(exec_prefix) $(LIBDIR) $(BINLIBDEST) $(DESTSHARED)

oldsharedinstall: $(DESTSHARED) $(SHAREDMODS)
		@for i in X $(SHAREDMODS); do \
		  if test $$i != X; then \
		    echo $(INSTALL_SHARED) $$i $(DESTSHARED)/`basename $$i`; \
		    $(INSTALL_SHARED) $$i $(DESTDIR)$(DESTSHARED)/`basename $$i`; \
		  fi; \
		done

$(DESTSHARED):
		@for i in $(DESTDIRS); \
		do \
			if test ! -d $(DESTDIR)$$i; then \
				echo "Creating directory $$i"; \
				$(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$$i; \
			else    true; \
			fi; \
		done

# Install the interpreter with $(VERSION) affixed
# This goes into $(exec_prefix)
altbininstall: $(BUILDPYTHON) 
	@for i in $(BINDIR) $(LIBDIR); \
	do \
		if test ! -d $(DESTDIR)$$i; then \
			echo "Creating directory $$i"; \
			$(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$$i; \
		else	true; \
		fi; \
	done
	if test "$(PYTHONFRAMEWORKDIR)" = "no-framework" ; then \
		$(INSTALL_PROGRAM) $(BUILDPYTHON) $(DESTDIR)$(BINDIR)/python$(LDVERSION)$(EXE); \
	else \
		$(INSTALL_PROGRAM) $(STRIPFLAG) Mac/pythonw $(DESTDIR)$(BINDIR)/python$(LDVERSION)$(EXE); \
	fi
	-if test "$(VERSION)" != "$(LDVERSION)"; then \
		if test -f $(DESTDIR)$(BINDIR)/python$(VERSION)$(EXE) -o -h $(DESTDIR)$(BINDIR)/python$(VERSION)$(EXE); \
		then rm -f $(DESTDIR)$(BINDIR)/python$(VERSION)$(EXE); \
		fi; \
		(cd $(DESTDIR)$(BINDIR); $(LN) python$(LDVERSION)$(EXE) python$(VERSION)$(EXE)); \
	fi
	if test -f $(LDLIBRARY) && test "$(PYTHONFRAMEWORKDIR)" = "no-framework" ; then \
		if test -n "$(DLLLIBRARY)" ; then \
			$(INSTALL_SHARED) $(DLLLIBRARY) $(DESTDIR)$(BINDIR); \
		else \
			$(INSTALL_SHARED) $(LDLIBRARY) $(DESTDIR)$(LIBDIR)/$(INSTSONAME); \
			if test $(LDLIBRARY) != $(INSTSONAME); then \
				(cd $(DESTDIR)$(LIBDIR); $(LN) -sf $(INSTSONAME) $(LDLIBRARY)) \
			fi \
		fi; \
		if test -n "$(PY3LIBRARY)"; then \
			$(INSTALL_SHARED) $(PY3LIBRARY) $(DESTDIR)$(LIBDIR)/$(PY3LIBRARY); \
		fi; \
	else	true; \
	fi
	if test "x$(LIPO_32BIT_FLAGS)" != "x" ; then \
		rm -f $(DESTDIR)$(BINDIR)python$(VERSION)-32$(EXE); \
		lipo $(LIPO_32BIT_FLAGS) \
			-output $(DESTDIR)$(BINDIR)/python$(VERSION)-32$(EXE) \
			$(DESTDIR)$(BINDIR)/python$(VERSION)$(EXE); \
	fi

bininstall: altbininstall
	if test ! -d $(DESTDIR)$(LIBPC); then \
		echo "Creating directory $(LIBPC)"; \
		$(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$(LIBPC); \
	fi
	-if test -f $(DESTDIR)$(BINDIR)/python3$(EXE) -o -h $(DESTDIR)$(BINDIR)/python3$(EXE); \
	then rm -f $(DESTDIR)$(BINDIR)/python3$(EXE); \
	else true; \
	fi
	(cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)$(EXE) python3$(EXE))
	-if test "$(VERSION)" != "$(LDVERSION)"; then \
		rm -f $(DESTDIR)$(BINDIR)/python$(VERSION)-config; \
		(cd $(DESTDIR)$(BINDIR); $(LN) -s python$(LDVERSION)-config python$(VERSION)-config); \
		rm -f $(DESTDIR)$(LIBPC)/python-$(LDVERSION).pc; \
		(cd $(DESTDIR)$(LIBPC); $(LN) -s python-$(VERSION).pc python-$(LDVERSION).pc); \
	fi
	-rm -f $(DESTDIR)$(BINDIR)/python3-config
	(cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)-config python3-config)
	-rm -f $(DESTDIR)$(LIBPC)/python3.pc
	(cd $(DESTDIR)$(LIBPC); $(LN) -s python-$(VERSION).pc python3.pc)
	-rm -f $(DESTDIR)$(BINDIR)/idle3
	(cd $(DESTDIR)$(BINDIR); $(LN) -s idle$(VERSION) idle3)
	-rm -f $(DESTDIR)$(BINDIR)/pydoc3
	(cd $(DESTDIR)$(BINDIR); $(LN) -s pydoc$(VERSION) pydoc3)
	-rm -f $(DESTDIR)$(BINDIR)/2to3
	(cd $(DESTDIR)$(BINDIR); $(LN) -s 2to3-$(VERSION) 2to3)
	-rm -f $(DESTDIR)$(BINDIR)/pyvenv
	(cd $(DESTDIR)$(BINDIR); $(LN) -s pyvenv-$(VERSION) pyvenv)
	if test "x$(LIPO_32BIT_FLAGS)" != "x" ; then \
		rm -f $(DESTDIR)$(BINDIR)/python3-32$(EXE); \
		(cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)-32$(EXE) python3-32$(EXE)) \
	fi

# Install the versioned manual page
altmaninstall:
	@for i in $(MANDIR) $(MANDIR)/man1; \
	do \
		if test ! -d $(DESTDIR)$$i; then \
			echo "Creating directory $$i"; \
			$(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$$i; \
		else	true; \
		fi; \
	done
	$(INSTALL_DATA) $(srcdir)/Misc/python.man \
		$(DESTDIR)$(MANDIR)/man1/python$(VERSION).1

# Install the unversioned manual page
maninstall:	altmaninstall
	-rm -f $(DESTDIR)$(MANDIR)/man1/python3.1
	(cd $(DESTDIR)$(MANDIR)/man1; $(LN) -s python$(VERSION).1 python3.1)

# Install the library
XMLLIBSUBDIRS=  xml xml/dom xml/etree xml/parsers xml/sax
LIBSUBDIRS=	tkinter tkinter/test tkinter/test/test_tkinter \
		tkinter/test/test_ttk site-packages test \
		test/audiodata \
		test/capath test/data \
		test/cjkencodings test/decimaltestdata test/xmltestdata \
		test/dtracedata \
		test/eintrdata \
		test/imghdrdata \
		test/libregrtest \
		test/subprocessdata test/sndhdrdata test/support \
		test/tracedmodules test/encoded_modules \
		test/test_import \
		test/test_import/data \
		test/test_import/data/circular_imports \
		test/test_import/data/circular_imports/subpkg \
		test/test_import/data/package \
		test/test_import/data/package2 \
		test/test_importlib/namespace_pkgs \
		test/test_importlib/namespace_pkgs/both_portions \
		test/test_importlib/namespace_pkgs/both_portions/foo \
		test/test_importlib/namespace_pkgs/not_a_namespace_pkg \
		test/test_importlib/namespace_pkgs/not_a_namespace_pkg/foo \
		test/test_importlib/namespace_pkgs/portion1 \
		test/test_importlib/namespace_pkgs/portion1/foo \
		test/test_importlib/namespace_pkgs/portion2 \
		test/test_importlib/namespace_pkgs/portion2/foo \
		test/test_importlib/namespace_pkgs/project1 \
		test/test_importlib/namespace_pkgs/project1/parent \
		test/test_importlib/namespace_pkgs/project1/parent/child \
		test/test_importlib/namespace_pkgs/project2 \
		test/test_importlib/namespace_pkgs/project2/parent \
		test/test_importlib/namespace_pkgs/project2/parent/child \
		test/test_importlib/namespace_pkgs/project3 \
		test/test_importlib/namespace_pkgs/project3/parent \
		test/test_importlib/namespace_pkgs/project3/parent/child \
                test/test_importlib/namespace_pkgs/module_and_namespace_package \
                test/test_importlib/namespace_pkgs/module_and_namespace_package/a_test \
		asyncio \
		test/test_asyncio \
		collections concurrent concurrent/futures encodings \
		email email/mime test/test_email test/test_email/data \
		ensurepip ensurepip/_bundled \
		html json test/test_json http dbm xmlrpc \
		sqlite3 sqlite3/test \
		logging csv wsgiref urllib \
		lib2to3 lib2to3/fixes lib2to3/pgen2 lib2to3/tests \
		lib2to3/tests/data lib2to3/tests/data/fixers \
		lib2to3/tests/data/fixers/myfixes \
		ctypes ctypes/test ctypes/macholib \
		idlelib idlelib/Icons idlelib/idle_test \
		distutils distutils/command distutils/tests $(XMLLIBSUBDIRS) \
		importlib test/test_importlib test/test_importlib/builtin \
		test/test_importlib/extension test/test_importlib/frozen \
		test/test_importlib/import_ test/test_importlib/source \
		test/test_tools test/test_warnings test/test_warnings/data \
		turtledemo \
		multiprocessing multiprocessing/dummy \
		unittest unittest/test unittest/test/testmock \
		venv venv/scripts venv/scripts/common venv/scripts/posix \
		curses pydoc_data
libinstall:	build_all $(srcdir)/Modules/xxmodule.c
	@for i in $(SCRIPTDIR) $(LIBDEST); \
	do \
		if test ! -d $(DESTDIR)$$i; then \
			echo "Creating directory $$i"; \
			$(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$$i; \
		else	true; \
		fi; \
	done
	@for d in $(LIBSUBDIRS); \
	do \
		a=$(srcdir)/Lib/$$d; \
		if test ! -d $$a; then continue; else true; fi; \
		b=$(LIBDEST)/$$d; \
		if test ! -d $(DESTDIR)$$b; then \
			echo "Creating directory $$b"; \
			$(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$$b; \
		else	true; \
		fi; \
	done
	@for i in $(srcdir)/Lib/*.py; \
	do \
		if test -x $$i; then \
			$(INSTALL_SCRIPT) $$i $(DESTDIR)$(LIBDEST); \
			echo $(INSTALL_SCRIPT) $$i $(LIBDEST); \
		else \
			$(INSTALL_DATA) $$i $(DESTDIR)$(LIBDEST); \
			echo $(INSTALL_DATA) $$i $(LIBDEST); \
		fi; \
	done
	@for d in $(LIBSUBDIRS); \
	do \
		a=$(srcdir)/Lib/$$d; \
		if test ! -d $$a; then continue; else true; fi; \
		if test `ls $$a | wc -l` -lt 1; then continue; fi; \
		b=$(LIBDEST)/$$d; \
		for i in $$a/*; \
		do \
			case $$i in \
			*CVS) ;; \
			*.py[co]) ;; \
			*.orig) ;; \
			*~) ;; \
			*) \
				if test -d $$i; then continue; fi; \
				if test -x $$i; then \
				    echo $(INSTALL_SCRIPT) $$i $$b; \
				    $(INSTALL_SCRIPT) $$i $(DESTDIR)$$b; \
				else \
				    echo $(INSTALL_DATA) $$i $$b; \
				    $(INSTALL_DATA) $$i $(DESTDIR)$$b; \
				fi;; \
			esac; \
		done; \
	done
	$(INSTALL_DATA) `cat pybuilddir.txt`/_sysconfigdata_$(ABIFLAGS)_$(MACHDEP)_$(MULTIARCH).py \
		$(DESTDIR)$(LIBDEST); \
	$(INSTALL_DATA) $(srcdir)/LICENSE $(DESTDIR)$(LIBDEST)/LICENSE.txt
	if test -d $(DESTDIR)$(LIBDEST)/distutils/tests; then \
		$(INSTALL_DATA) $(srcdir)/Modules/xxmodule.c \
			$(DESTDIR)$(LIBDEST)/distutils/tests ; \
	fi
	-PYTHONPATH=$(DESTDIR)$(LIBDEST)  $(RUNSHARED) \
		$(PYTHON_FOR_BUILD) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \
		-d $(LIBDEST) -f \
		-x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
		$(DESTDIR)$(LIBDEST)
	-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
		$(PYTHON_FOR_BUILD) -Wi -O $(DESTDIR)$(LIBDEST)/compileall.py \
		-d $(LIBDEST) -f \
		-x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
		$(DESTDIR)$(LIBDEST)
	-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
		$(PYTHON_FOR_BUILD) -Wi -OO $(DESTDIR)$(LIBDEST)/compileall.py \
		-d $(LIBDEST) -f \
		-x 'bad_coding|badsyntax|site-packages|lib2to3/tests/data' \
		$(DESTDIR)$(LIBDEST)
	-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
		$(PYTHON_FOR_BUILD) -Wi $(DESTDIR)$(LIBDEST)/compileall.py \
		-d $(LIBDEST)/site-packages -f \
		-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
	-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
		$(PYTHON_FOR_BUILD) -Wi -O $(DESTDIR)$(LIBDEST)/compileall.py \
		-d $(LIBDEST)/site-packages -f \
		-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
	-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
		$(PYTHON_FOR_BUILD) -Wi -OO $(DESTDIR)$(LIBDEST)/compileall.py \
		-d $(LIBDEST)/site-packages -f \
		-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
	-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
		$(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/Grammar.txt
	-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
		$(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/PatternGrammar.txt

python-config: $(srcdir)/Misc/python-config.in Misc/python-config.sh
	# Substitution happens here, as the completely-expanded BINDIR
	# is not available in configure
	sed -e "s,@EXENAME@,$(BINDIR)/python$(LDVERSION)$(EXE)," < $(srcdir)/Misc/python-config.in >python-config.py
	# Replace makefile compat. variable references with shell script compat. ones; $(VAR) -> ${VAR}
	LC_ALL=C sed -e 's,\$$(\([A-Za-z0-9_]*\)),\$$\{\1\},g' < Misc/python-config.sh >python-config
	# On Darwin, always use the python version of the script, the shell
	# version doesn't use the compiler customizations that are provided
	# in python (_osx_support.py).
	if test `uname -s` = Darwin; then \
		cp python-config.py python-config; \
	fi


# Install the include files
INCLDIRSTOMAKE=$(INCLUDEDIR) $(CONFINCLUDEDIR) $(INCLUDEPY) $(CONFINCLUDEPY)
inclinstall:
	@for i in $(INCLDIRSTOMAKE); \
	do \
		if test ! -d $(DESTDIR)$$i; then \
			echo "Creating directory $$i"; \
			$(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$$i; \
		else	true; \
		fi; \
	done
	@for i in $(srcdir)/Include/*.h; \
	do \
		echo $(INSTALL_DATA) $$i $(INCLUDEPY); \
		$(INSTALL_DATA) $$i $(DESTDIR)$(INCLUDEPY); \
	done
	$(INSTALL_DATA) pyconfig.h $(DESTDIR)$(CONFINCLUDEPY)/pyconfig.h

# Install the library and miscellaneous stuff needed for extending/embedding
# This goes into $(exec_prefix)
LIBPL=		$(prefix)/lib/python3.6/config-$(VERSION)$(ABIFLAGS)-x86_64-linux-gnu

# pkgconfig directory
LIBPC=		$(LIBDIR)/pkgconfig

libainstall:	all python-config
	@for i in $(LIBDIR) $(LIBPL) $(LIBPC); \
	do \
		if test ! -d $(DESTDIR)$$i; then \
			echo "Creating directory $$i"; \
			$(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$$i; \
		else	true; \
		fi; \
	done
	@if test -d $(LIBRARY); then :; else \
		if test "$(PYTHONFRAMEWORKDIR)" = no-framework; then \
			if test "$(SHLIB_SUFFIX)" = .dll; then \
				$(INSTALL_DATA) $(LDLIBRARY) $(DESTDIR)$(LIBPL) ; \
			else \
				$(INSTALL_DATA) $(LIBRARY) $(DESTDIR)$(LIBPL)/$(LIBRARY) ; \
			fi; \
		else \
			echo Skip install of $(LIBRARY) - use make frameworkinstall; \
		fi; \
	fi
	$(INSTALL_DATA) Modules/config.c $(DESTDIR)$(LIBPL)/config.c
	$(INSTALL_DATA) Programs/python.o $(DESTDIR)$(LIBPL)/python.o
	$(INSTALL_DATA) $(srcdir)/Modules/config.c.in $(DESTDIR)$(LIBPL)/config.c.in
	$(INSTALL_DATA) Makefile $(DESTDIR)$(LIBPL)/Makefile
	$(INSTALL_DATA) Modules/Setup $(DESTDIR)$(LIBPL)/Setup
	$(INSTALL_DATA) Modules/Setup.local $(DESTDIR)$(LIBPL)/Setup.local
	$(INSTALL_DATA) Modules/Setup.config $(DESTDIR)$(LIBPL)/Setup.config
	$(INSTALL_DATA) Misc/python.pc $(DESTDIR)$(LIBPC)/python-$(VERSION).pc
	$(INSTALL_SCRIPT) $(srcdir)/Modules/makesetup $(DESTDIR)$(LIBPL)/makesetup
	$(INSTALL_SCRIPT) $(srcdir)/install-sh $(DESTDIR)$(LIBPL)/install-sh
	$(INSTALL_SCRIPT) python-config.py $(DESTDIR)$(LIBPL)/python-config.py
	$(INSTALL_SCRIPT) python-config $(DESTDIR)$(BINDIR)/python$(LDVERSION)-config
	@if [ -s Modules/python.exp -a \
		"`echo $(MACHDEP) | sed 's/^\(...\).*/\1/'`" = "aix" ]; then \
		echo; echo "Installing support files for building shared extension modules on AIX:"; \
		$(INSTALL_DATA) Modules/python.exp		\
				$(DESTDIR)$(LIBPL)/python.exp;		\
		echo; echo "$(LIBPL)/python.exp";		\
		$(INSTALL_SCRIPT) $(srcdir)/Modules/makexp_aix	\
				$(DESTDIR)$(LIBPL)/makexp_aix;		\
		echo "$(LIBPL)/makexp_aix";			\
		$(INSTALL_SCRIPT) Modules/ld_so_aix	\
				$(DESTDIR)$(LIBPL)/ld_so_aix;		\
		echo "$(LIBPL)/ld_so_aix";			\
		echo; echo "See Misc/AIX-NOTES for details.";	\
	else true; \
	fi

# Install the dynamically loadable modules
# This goes into $(exec_prefix)
sharedinstall: sharedmods
	$(RUNSHARED) $(PYTHON_FOR_BUILD) $(srcdir)/setup.py install \
	   	--prefix=$(prefix) \
		--install-scripts=$(BINDIR) \
		--install-platlib=$(DESTSHARED) \
		--root=$(DESTDIR)/
	-rm $(DESTDIR)$(DESTSHARED)/_sysconfigdata_$(ABIFLAGS)_$(MACHDEP)_$(MULTIARCH).py
	-rm -r $(DESTDIR)$(DESTSHARED)/__pycache__

# Here are a couple of targets for MacOSX again, to install a full
# framework-based Python. frameworkinstall installs everything, the
# subtargets install specific parts. Much of the actual work is offloaded to
# the Makefile in Mac
#
#
# This target is here for backward compatibility, previous versions of Python
# hadn't integrated framework installation in the normal install process.
frameworkinstall: install

# On install, we re-make the framework
# structure in the install location, /Library/Frameworks/ or the argument to
# --enable-framework. If --enable-framework has been specified then we have
# automatically set prefix to the location deep down in the framework, so we
# only have to cater for the structural bits of the framework.

frameworkinstallframework: frameworkinstallstructure install frameworkinstallmaclib

frameworkinstallstructure:	$(LDLIBRARY)
	@if test "$(PYTHONFRAMEWORKDIR)" = no-framework; then \
		echo Not configured with --enable-framework; \
		exit 1; \
	else true; \
	fi
	@for i in $(prefix)/Resources/English.lproj $(prefix)/lib; do\
		if test ! -d $(DESTDIR)$$i; then \
			echo "Creating directory $(DESTDIR)$$i"; \
			$(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$$i; \
		else	true; \
		fi; \
	done
	$(LN) -fsn include/python$(LDVERSION) $(DESTDIR)$(prefix)/Headers
	sed 's/%VERSION%/'"`$(RUNSHARED) ./$(BUILDPYTHON) -c 'import platform; print(platform.python_version())'`"'/g' < $(RESSRCDIR)/Info.plist > $(DESTDIR)$(prefix)/Resources/Info.plist
	$(LN) -fsn $(VERSION) $(DESTDIR)$(PYTHONFRAMEWORKINSTALLDIR)/Versions/Current
	$(LN) -fsn Versions/Current/$(PYTHONFRAMEWORK) $(DESTDIR)$(PYTHONFRAMEWORKINSTALLDIR)/$(PYTHONFRAMEWORK)
	$(LN) -fsn Versions/Current/Headers $(DESTDIR)$(PYTHONFRAMEWORKINSTALLDIR)/Headers
	$(LN) -fsn Versions/Current/Resources $(DESTDIR)$(PYTHONFRAMEWORKINSTALLDIR)/Resources
	$(INSTALL_SHARED) $(LDLIBRARY) $(DESTDIR)$(PYTHONFRAMEWORKPREFIX)/$(LDLIBRARY)

# This installs Mac/Lib into the framework
# Install a number of symlinks to keep software that expects a normal unix
# install (which includes python-config) happy.
frameworkinstallmaclib:
	$(LN) -fs "../../../$(PYTHONFRAMEWORK)" "$(DESTDIR)$(LIBPL)/libpython$(LDVERSION).a"
	$(LN) -fs "../../../$(PYTHONFRAMEWORK)" "$(DESTDIR)$(LIBPL)/libpython$(LDVERSION).dylib"
	$(LN) -fs "../../../$(PYTHONFRAMEWORK)" "$(DESTDIR)$(LIBPL)/libpython$(VERSION).a"
	$(LN) -fs "../../../$(PYTHONFRAMEWORK)" "$(DESTDIR)$(LIBPL)/libpython$(VERSION).dylib"
	$(LN) -fs "../$(PYTHONFRAMEWORK)" "$(DESTDIR)$(prefix)/lib/libpython$(LDVERSION).dylib"
	$(LN) -fs "../$(PYTHONFRAMEWORK)" "$(DESTDIR)$(prefix)/lib/libpython$(VERSION).dylib"

# This installs the IDE, the Launcher and other apps into /Applications
frameworkinstallapps:
	cd Mac && $(MAKE) installapps DESTDIR="$(DESTDIR)"

# Build the bootstrap executable that will spawn the interpreter inside
# an app bundle within the framework.  This allows the interpreter to
# run OS X GUI APIs.
frameworkpythonw:
	cd Mac && $(MAKE) pythonw

# This installs the python* and other bin symlinks in $prefix/bin or in
# a bin directory relative to the framework root
frameworkinstallunixtools:
	cd Mac && $(MAKE) installunixtools DESTDIR="$(DESTDIR)"

frameworkaltinstallunixtools:
	cd Mac && $(MAKE) altinstallunixtools DESTDIR="$(DESTDIR)"

# This installs the Tools into the applications directory.
# It is not part of a normal frameworkinstall
frameworkinstallextras:
	cd Mac && $(MAKE) installextras DESTDIR="$(DESTDIR)"

# This installs a few of the useful scripts in Tools/scripts
scriptsinstall:
	SRCDIR=$(srcdir) $(RUNSHARED) \
	$(PYTHON_FOR_BUILD) $(srcdir)/Tools/scripts/setup.py install \
	--prefix=$(prefix) \
	--install-scripts=$(BINDIR) \
	--root=$(DESTDIR)/

# Build the toplevel Makefile
Makefile.pre: $(srcdir)/Makefile.pre.in config.status
	CONFIG_FILES=Makefile.pre CONFIG_HEADERS= $(SHELL) config.status
	$(MAKE) -f Makefile.pre Makefile

# Run the configure script.
config.status:	$(srcdir)/configure
	$(SHELL) $(srcdir)/configure $(CONFIG_ARGS)

.PRECIOUS: config.status $(BUILDPYTHON) Makefile Makefile.pre

# Some make's put the object file in the current directory
.c.o:
	$(CC) -c $(PY_CORE_CFLAGS) -o $@ $<

# bpo-30104: dtoa.c uses union to cast double to unsigned long[2]. clang 4.0
# with -O2 or higher and strict aliasing miscompiles the ratio() function
# causing rounding issues. Compile dtoa.c using -fno-strict-aliasing on clang.
# https://bugs.llvm.org//show_bug.cgi?id=31928
Python/dtoa.o: Python/dtoa.c
	$(CC) -c $(PY_CORE_CFLAGS) $(CFLAGS_ALIASING) -o $@ $<

# Run reindent on the library
reindent:
	./$(BUILDPYTHON) $(srcdir)/Tools/scripts/reindent.py -r $(srcdir)/Lib

# Rerun configure with the same options as it was run last time,
# provided the config.status script exists
recheck:
	$(SHELL) config.status --recheck
	$(SHELL) config.status

# Regenerate configure and pyconfig.h.in
.PHONY: autoconf
autoconf:
	# Regenerate the configure script from configure.ac using autoconf
	(cd $(srcdir); autoconf -Wall)
	# Regenerate pyconfig.h.in from configure.ac using autoheader
	(cd $(srcdir); autoheader -Wall)

# Create a tags file for vi
tags::
	ctags -w $(srcdir)/Include/*.h
	for i in $(SRCDIRS); do ctags -f tags -w -a $(srcdir)/$$i/*.[ch]; done
	ctags -f tags -w -a $(srcdir)/Modules/_ctypes/*.[ch]
	LC_ALL=C sort -o tags tags

# Create a tags file for GNU Emacs
TAGS::
	cd $(srcdir); \
	etags Include/*.h; \
	for i in $(SRCDIRS); do etags -a $$i/*.[ch]; done

# Sanitation targets -- clean leaves libraries, executables and tags
# files, which clobber removes as well
pycremoval:
	-find $(srcdir) -depth -name '__pycache__' -exec rm -rf {} ';'
	-find $(srcdir) -name '*.py[co]' -exec rm -f {} ';'

rmtestturds:
	-rm -f *BAD *GOOD *SKIPPED
	-rm -rf OUT
	-rm -f *.TXT
	-rm -f *.txt
	-rm -f gb-18030-2000.xml

docclean:
	-rm -rf Doc/build
	-rm -rf Doc/tools/sphinx Doc/tools/pygments Doc/tools/docutils

clean: pycremoval
	find . -name '*.[oa]' -exec rm -f {} ';'
	find . -name '*.s[ol]' -exec rm -f {} ';'
	find . -name '*.so.[0-9]*.[0-9]*' -exec rm -f {} ';'
	find build -name 'fficonfig.h' -exec rm -f {} ';' || true
	find build -name '*.py' -exec rm -f {} ';' || true
	find build -name '*.py[co]' -exec rm -f {} ';' || true
	-rm -f pybuilddir.txt
	-rm -f Lib/lib2to3/*Grammar*.pickle
	-rm -f Programs/_testembed Programs/_freeze_importlib
	-find build -type f -a ! -name '*.gc??' -exec rm -f {} ';'
	-rm -f Include/pydtrace_probes.h

profile-removal:
	find . -name '*.gc??' -exec rm -f {} ';'
	find . -name '*.profclang?' -exec rm -f {} ';'
	find . -name '*.dyn' -exec rm -f {} ';'
	rm -f $(COVERAGE_INFO)
	rm -rf $(COVERAGE_REPORT)

clobber: clean profile-removal
	-rm -f $(BUILDPYTHON) $(PGEN) $(LIBRARY) $(LDLIBRARY) $(DLLLIBRARY) \
		tags TAGS \
		config.cache config.log pyconfig.h Modules/config.c
	-rm -rf build platform
	-rm -rf $(PYTHONFRAMEWORKDIR)
	-rm -f python-config.py python-config

# Make things extra clean, before making a distribution:
# remove all generated files, even Makefile[.pre]
# Keep configure and Python-ast.[ch], it's possible they can't be generated
distclean: clobber
	for file in $(srcdir)/Lib/test/data/* ; do \
	    if test "$$file" != "$(srcdir)/Lib/test/data/README"; then rm "$$file"; fi; \
	done
	-rm -f core Makefile Makefile.pre config.status \
		Modules/Setup Modules/Setup.local Modules/Setup.config \
		Modules/ld_so_aix Modules/python.exp Misc/python.pc \
		Misc/python-config.sh
	-rm -f python*-gdb.py
	# Issue #28258: set LC_ALL to avoid issues with Estonian locale.
	# Expansion is performed here by shell (spawned by make) itself before
	# arguments are passed to find. So LC_ALL=C must be set as a separate
	# command.
	LC_ALL=C; find $(srcdir)/[a-zA-Z]* '(' -name '*.fdc' -o -name '*~' \
				     -o -name '[@,#]*' -o -name '*.old' \
				     -o -name '*.orig' -o -name '*.rej' \
				     -o -name '*.bak' ')' \
				     -exec rm -f {} ';'

# Check for smelly exported symbols (not starting with Py/_Py)
smelly: all
	nm -p $(LIBRARY) | \
		sed -n "/ [TDB] /s/.* //p" | grep -v "^_*Py" | sort -u; \

# Find files with funny names
funny:
	find $(SUBDIRS) $(SUBDIRSTOO) \
		-type d \
		-o -name '*.[chs]' \
		-o -name '*.py' \
		-o -name '*.pyw' \
		-o -name '*.dat' \
		-o -name '*.el' \
		-o -name '*.fd' \
		-o -name '*.in' \
		-o -name '*.gif' \
		-o -name '*.txt' \
		-o -name '*.xml' \
		-o -name '*.xbm' \
		-o -name '*.xpm' \
		-o -name '*.uue' \
		-o -name '*.decTest' \
		-o -name '*.tmCommand' \
		-o -name '*.tmSnippet' \
		-o -name 'Setup' \
		-o -name 'Setup.*' \
		-o -name README \
		-o -name NEWS \
		-o -name HISTORY \
		-o -name Makefile \
		-o -name ChangeLog \
		-o -name .hgignore \
		-o -name .bzrignore \
		-o -name MANIFEST \
		-o -print

# Perform some verification checks on any modified files.
patchcheck: all
	$(RUNSHARED) ./$(BUILDPYTHON) $(srcdir)/Tools/scripts/patchcheck.py

# Dependencies

Python/thread.o:  $(srcdir)/Python/thread_foobar.h $(srcdir)/Python/thread_nt.h $(srcdir)/Python/thread_pthread.h

# Declare targets that aren't real files
.PHONY: all build_all sharedmods check-clean-src oldsharedmods test quicktest
.PHONY: install altinstall oldsharedinstall bininstall altbininstall
.PHONY: maninstall libinstall inclinstall libainstall sharedinstall
.PHONY: frameworkinstall frameworkinstallframework frameworkinstallstructure
.PHONY: frameworkinstallmaclib frameworkinstallapps frameworkinstallunixtools
.PHONY: frameworkaltinstallunixtools recheck clean clobber distclean
.PHONY: smelly funny patchcheck touch altmaninstall commoninstall
.PHONY: gdbhooks

# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
# Local Variables:
# mode: makefile
# End:

# Rules appended by makedepend

Modules/_threadmodule.o: $(srcdir)/Modules/_threadmodule.c; $(CC) $(PY_CORE_CFLAGS)  -c $(srcdir)/Modules/_threadmodule.c -o Modules/_threadmodule.o
Modules/_thread$(EXT_SUFFIX):  Modules/_threadmodule.o; $(BLDSHARED)  Modules/_threadmodule.o   -o Modules/_thread$(EXT_SUFFIX)
Modules/posixmodule.o: $(srcdir)/Modules/posixmodule.c; $(CC) $(PY_CORE_CFLAGS)  -c $(srcdir)/Modules/posixmodule.c -o Modules/posixmodule.o
Modules/posix$(EXT_SUFFIX):  Modules/posixmodule.o; $(BLDSHARED)  Modules/posixmodule.o   -o Modules/posix$(EXT_SUFFIX)
Modules/errnomodule.o: $(srcdir)/Modules/errnomodule.c; $(CC) $(PY_CORE_CFLAGS)  -c $(srcdir)/Modules/errnomodule.c -o Modules/errnomodule.o
Modules/errno$(EXT_SUFFIX):  Modules/errnomodule.o; $(BLDSHARED)  Modules/errnomodule.o   -o Modules/errno$(EXT_SUFFIX)
Modules/pwdmodule.o: $(srcdir)/Modules/pwdmodule.c; $(CC) $(PY_CORE_CFLAGS)  -c $(srcdir)/Modules/pwdmodule.c -o Modules/pwdmodule.o
Modules/pwd$(EXT_SUFFIX):  Modules/pwdmodule.o; $(BLDSHARED)  Modules/pwdmodule.o   -o Modules/pwd$(EXT_SUFFIX)
Modules/_sre.o: $(srcdir)/Modules/_sre.c; $(CC) $(PY_CORE_CFLAGS)  -c $(srcdir)/Modules/_sre.c -o Modules/_sre.o
Modules/_sre$(EXT_SUFFIX):  Modules/_sre.o; $(BLDSHARED)  Modules/_sre.o   -o Modules/_sre$(EXT_SUFFIX)
Modules/_codecsmodule.o: $(srcdir)/Modules/_codecsmodule.c; $(CC) $(PY_CORE_CFLAGS)  -c $(srcdir)/Modules/_codecsmodule.c -o Modules/_codecsmodule.o
Modules/_codecs$(EXT_SUFFIX):  Modules/_codecsmodule.o; $(BLDSHARED)  Modules/_codecsmodule.o   -o Modules/_codecs$(EXT_SUFFIX)
Modules/_weakref.o: $(srcdir)/Modules/_weakref.c; $(CC) $(PY_CORE_CFLAGS)  -c $(srcdir)/Modules/_weakref.c -o Modules/_weakref.o
Modules/_weakref$(EXT_SUFFIX):  Modules/_weakref.o; $(BLDSHARED)  Modules/_weakref.o   -o Modules/_weakref$(EXT_SUFFIX)
Modules/_functoolsmodule.o: $(srcdir)/Modules/_functoolsmodule.c; $(CC) $(PY_CORE_CFLAGS)  -c $(srcdir)/Modules/_functoolsmodule.c -o Modules/_functoolsmodule.o
Modules/_functools$(EXT_SUFFIX):  Modules/_functoolsmodule.o; $(BLDSHARED)  Modules/_functoolsmodule.o   -o Modules/_functools$(EXT_SUFFIX)
Modules/_operator.o: $(srcdir)/Modules/_operator.c; $(CC) $(PY_CORE_CFLAGS)  -c $(srcdir)/Modules/_operator.c -o Modules/_operator.o
Modules/_operator$(EXT_SUFFIX):  Modules/_operator.o; $(BLDSHARED)  Modules/_operator.o   -o Modules/_operator$(EXT_SUFFIX)
Modules/_collectionsmodule.o: $(srcdir)/Modules/_collectionsmodule.c; $(CC) $(PY_CORE_CFLAGS)  -c $(srcdir)/Modules/_collectionsmodule.c -o Modules/_collectionsmodule.o
Modules/_collections$(EXT_SUFFIX):  Modules/_collectionsmodule.o; $(BLDSHARED)  Modules/_collectionsmodule.o   -o Modules/_collections$(EXT_SUFFIX)
Modules/itertoolsmodule.o: $(srcdir)/Modules/itertoolsmodule.c; $(CC) $(PY_CORE_CFLAGS)  -c $(srcdir)/Modules/itertoolsmodule.c -o Modules/itertoolsmodule.o
Modules/itertools$(EXT_SUFFIX):  Modules/itertoolsmodule.o; $(BLDSHARED)  Modules/itertoolsmodule.o   -o Modules/itertools$(EXT_SUFFIX)
Modules/atexitmodule.o: $(srcdir)/Modules/atexitmodule.c; $(CC) $(PY_CORE_CFLAGS)  -c $(srcdir)/Modules/atexitmodule.c -o Modules/atexitmodule.o
Modules/atexit$(EXT_SUFFIX):  Modules/atexitmodule.o; $(BLDSHARED)  Modules/atexitmodule.o   -o Modules/atexit$(EXT_SUFFIX)
Modules/signalmodule.o: $(srcdir)/Modules/signalmodule.c; $(CC) $(PY_CORE_CFLAGS)  -c $(srcdir)/Modules/signalmodule.c -o Modules/signalmodule.o
Modules/_signal$(EXT_SUFFIX):  Modules/signalmodule.o; $(BLDSHARED)  Modules/signalmodule.o   -o Modules/_signal$(EXT_SUFFIX)
Modules/_stat.o: $(srcdir)/Modules/_stat.c; $(CC) $(PY_CORE_CFLAGS)  -c $(srcdir)/Modules/_stat.c -o Modules/_stat.o
Modules/_stat$(EXT_SUFFIX):  Modules/_stat.o; $(BLDSHARED)  Modules/_stat.o   -o Modules/_stat$(EXT_SUFFIX)
Modules/timemodule.o: $(srcdir)/Modules/timemodule.c; $(CC) $(PY_CORE_CFLAGS)  -c $(srcdir)/Modules/timemodule.c -o Modules/timemodule.o
Modules/time$(EXT_SUFFIX):  Modules/timemodule.o; $(BLDSHARED)  Modules/timemodule.o   -o Modules/time$(EXT_SUFFIX)
Modules/_localemodule.o: $(srcdir)/Modules/_localemodule.c; $(CC) $(PY_CORE_CFLAGS)  -c $(srcdir)/Modules/_localemodule.c -o Modules/_localemodule.o
Modules/_locale$(EXT_SUFFIX):  Modules/_localemodule.o; $(BLDSHARED)  Modules/_localemodule.o   -o Modules/_locale$(EXT_SUFFIX)
Modules/_iomodule.o: $(srcdir)/Modules/_io/_iomodule.c; $(CC) $(PY_CORE_CFLAGS)  -I$(srcdir)/Modules/_io -c $(srcdir)/Modules/_io/_iomodule.c -o Modules/_iomodule.o
Modules/iobase.o: $(srcdir)/Modules/_io/iobase.c; $(CC) $(PY_CORE_CFLAGS)  -I$(srcdir)/Modules/_io -c $(srcdir)/Modules/_io/iobase.c -o Modules/iobase.o
Modules/fileio.o: $(srcdir)/Modules/_io/fileio.c; $(CC) $(PY_CORE_CFLAGS)  -I$(srcdir)/Modules/_io -c $(srcdir)/Modules/_io/fileio.c -o Modules/fileio.o
Modules/bytesio.o: $(srcdir)/Modules/_io/bytesio.c; $(CC) $(PY_CORE_CFLAGS)  -I$(srcdir)/Modules/_io -c $(srcdir)/Modules/_io/bytesio.c -o Modules/bytesio.o
Modules/bufferedio.o: $(srcdir)/Modules/_io/bufferedio.c; $(CC) $(PY_CORE_CFLAGS)  -I$(srcdir)/Modules/_io -c $(srcdir)/Modules/_io/bufferedio.c -o Modules/bufferedio.o
Modules/textio.o: $(srcdir)/Modules/_io/textio.c; $(CC) $(PY_CORE_CFLAGS)  -I$(srcdir)/Modules/_io -c $(srcdir)/Modules/_io/textio.c -o Modules/textio.o
Modules/stringio.o: $(srcdir)/Modules/_io/stringio.c; $(CC) $(PY_CORE_CFLAGS)  -I$(srcdir)/Modules/_io -c $(srcdir)/Modules/_io/stringio.c -o Modules/stringio.o
Modules/_io$(EXT_SUFFIX):  Modules/_iomodule.o Modules/iobase.o Modules/fileio.o Modules/bytesio.o Modules/bufferedio.o Modules/textio.o Modules/stringio.o; $(BLDSHARED)  Modules/_iomodule.o Modules/iobase.o Modules/fileio.o Modules/bytesio.o Modules/bufferedio.o Modules/textio.o Modules/stringio.o   -o Modules/_io$(EXT_SUFFIX)
Modules/zipimport.o: $(srcdir)/Modules/zipimport.c; $(CC) $(PY_CORE_CFLAGS)  -c $(srcdir)/Modules/zipimport.c -o Modules/zipimport.o
Modules/zipimport$(EXT_SUFFIX):  Modules/zipimport.o; $(BLDSHARED)  Modules/zipimport.o   -o Modules/zipimport$(EXT_SUFFIX)
Modules/faulthandler.o: $(srcdir)/Modules/faulthandler.c; $(CC) $(PY_CORE_CFLAGS)  -c $(srcdir)/Modules/faulthandler.c -o Modules/faulthandler.o
Modules/faulthandler$(EXT_SUFFIX):  Modules/faulthandler.o; $(BLDSHARED)  Modules/faulthandler.o   -o Modules/faulthandler$(EXT_SUFFIX)
Modules/_tracemalloc.o: $(srcdir)/Modules/_tracemalloc.c; $(CC) $(PY_CORE_CFLAGS)  -c $(srcdir)/Modules/_tracemalloc.c -o Modules/_tracemalloc.o
Modules/hashtable.o: $(srcdir)/Modules/hashtable.c; $(CC) $(PY_CORE_CFLAGS)  -c $(srcdir)/Modules/hashtable.c -o Modules/hashtable.o
Modules/_tracemalloc$(EXT_SUFFIX):  Modules/_tracemalloc.o Modules/hashtable.o; $(BLDSHARED)  Modules/_tracemalloc.o Modules/hashtable.o   -o Modules/_tracemalloc$(EXT_SUFFIX)
Modules/symtablemodule.o: $(srcdir)/Modules/symtablemodule.c; $(CC) $(PY_CORE_CFLAGS)  -c $(srcdir)/Modules/symtablemodule.c -o Modules/symtablemodule.o
Modules/_symtable$(EXT_SUFFIX):  Modules/symtablemodule.o; $(BLDSHARED)  Modules/symtablemodule.o   -o Modules/_symtable$(EXT_SUFFIX)
Modules/xxsubtype.o: $(srcdir)/Modules/xxsubtype.c; $(CC) $(PY_CORE_CFLAGS)  -c $(srcdir)/Modules/xxsubtype.c -o Modules/xxsubtype.o
Modules/xxsubtype$(EXT_SUFFIX):  Modules/xxsubtype.o; $(BLDSHARED)  Modules/xxsubtype.o   -o Modules/xxsubtype$(EXT_SUFFIX)

  

root@gateway Python-3.6.8]# make check
make: *** No rule to make target `check'. Stop.
[root@gateway Python-3.6.8]#

 

该Makefile中 没有check的假目标

注意3个目标

 

install:  commoninstall bininstall maninstall 
    if test "x$(ENSUREPIP)" != "xno"  ; then \
        case $(ENSUREPIP) in \
            upgrade) ensurepip="--upgrade" ;; \
            install|*) ensurepip="" ;; \
        esac; \
        $(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \
            $$ensurepip --root=$(DESTDIR)/ ; \
    fi

altinstall: commoninstall
    if test "x$(ENSUREPIP)" != "xno"  ; then \
        case $(ENSUREPIP) in \
            upgrade) ensurepip="--altinstall --upgrade" ;; \
            install|*) ensurepip="--altinstall" ;; \
        esac; \
        $(RUNSHARED) $(PYTHON_FOR_BUILD) -m ensurepip \
            $$ensurepip --root=$(DESTDIR)/ ; \
    fi

 

gdb hooks

build_all:  check-clean-src $(BUILDPYTHON) oldsharedmods sharedmods gdbhooks \
        Programs/_testembed python-config

 

# Copy up the gdb python hooks into a position where they can be automatically
# loaded by gdb during Lib/test/test_gdb.py
#
# Distributors are likely to want to install this somewhere else e.g. relative
# to the stripped DWARF data for the shared library.
gdbhooks: $(BUILDPYTHON)-gdb.py

 

发表评论

0/200
477 点赞
0 评论
收藏
为你推荐 换一批