1+ <?php
2+
3+ /**
4+ * ██╗ ██╗██████╗ ███████╗███████╗██╗
5+ * ██║ ██║██╔══██╗██╔════╝██╔════╝██║
6+ * ██║ ██║██████╔╝█████╗ █████╗ ██║
7+ * ██║ ██║██╔══██╗██╔══╝ ██╔══╝ ██║
8+ * ███████╗██║██████╔╝██║ ██║ ██║
9+ * ╚══════╝╚═╝╚═════╝ ╚═╝ ╚═╝ ╚═╝
10+ */
11+
12+
13+ $ path = ARCH_PATH . $ lib ->name . '- ' . $ lib ->version . '\\' ;
14+ $ ffilog = LOG . 'libffi.log ' ;
15+
16+
17+ // Verify if libffi is installed
18+ if (is_dir ($ path ) && is_file ($ path . 'win32\vs16_x64\x64\Release\libffi.lib ' ) && is_file (DEPS_PATH . 'lib\libffi.lib ' )) {
19+ draw_status ($ lib ->name . '- ' . $ lib ->version , "installed " , Green);
20+ return ;
21+ }
22+
23+
24+ // Download and unzip libffi
25+ $ tmpfile = TMP .pathinfo ($ lib ->download_url , PATHINFO_BASENAME );
26+ if (!download_file ($ lib ->download_url , $ tmpfile , pathinfo ($ tmpfile , PATHINFO_BASENAME ))) exit_error ();
27+ if (!unzip ($ tmpfile , ARCH_PATH )) exit_error ();
28+ if (!is_dir ($ path )) exit_error ("Can't find untar results " );
29+ if (!unzip (__DIR__ . '\libffi-msvc.zip ' , $ path )) exit_error ("Can't unzip msvc project " );
30+ if (!@rename ($ path . 'win32\vs16_x64\fficonfig.h ' , $ path . 'fficonfig.h ' )) exit_error ("Can't rename fficonfig.h " );
31+ if (!@rename ($ path . 'win32\vs16_x64\ffi.h ' , $ path . 'include\ffi.h ' )) exit_error ("Can't rename ffi.h " );
32+
33+
34+ // Compile libffi
35+ $ label = "Compile " . $ lib ->name . '- ' . $ lib ->version ;
36+ draw_line ($ label , "running " , Yellow);
37+ $ bat = '@echo off ' .RN ;
38+ $ bat .= 'cd ' . escapeshellarg ($ path . 'win32\vs16_x64 ' ).RN ;
39+ $ bat .= 'DEVENV libffi-msvc.sln /rebuild "Release|x64" ' .RN ;
40+ $ batfile = TMP . 'build_libffi.bat ' ;
41+ file_put_contents ($ batfile , $ bat );
42+ $ ret = shell_exec_vs16 ($ batfile );
43+ file_put_contents ($ ffilog , $ ret );
44+
45+
46+ // Verify if the build works
47+ if (!is_file ($ path . 'win32\vs16_x64\x64\Release\libffi.lib ' )) draw_status ($ label , "failed " , Red, true , 'SEE: ' . $ ffilog );
48+ else draw_status ($ label , "complete " , Green);
49+
50+
51+ // Install libffi
52+ $ label = "Install " . $ lib ->name . '- ' . $ lib ->version ;
53+ draw_line ($ label , "running " , Yellow);
54+ $ builddir = $ path . 'build \\' ;
55+
56+ $ files [$ path . 'win32\vs16_x64\x64\Release\libffi.lib ' ] = 'lib\libffi.lib ' ;
57+ $ files [$ path . 'fficonfig.h ' ] = 'include\fficonfig.h ' ;
58+ $ files [$ path . 'include\ffi.h ' ] = 'include\ffi.h ' ;
59+ $ files [$ path . 'src\x86\ffitarget.h ' ] = 'include\ffitarget.h ' ;
60+
61+ if (!create_build ($ builddir , $ files )) draw_status ($ label , "failed " , Red, true );
62+ if (!install_deps ($ builddir )) draw_status ($ label , "failed " , Red, true );
63+ else draw_status ($ label , "complete " , Green);
64+
65+ delete_parent_deps ($ lib ->name );
0 commit comments