📄 configure.pl
字号:
if($make_shared) { $lib_flags .= ' $(SO_OBJ_FLAGS)'; $libs .= ' $(SHARED_LIB)'; }##################### COMMON CODE (PARTIALLY) ###################### sub file_list { my ($spaces, $put_in, $from, $to, %files) = @_; my $len = $spaces; my $list; foreach (sort keys %files) { my $file = $_; my $dir = $put_in; if(!defined($dir)) { $dir = $files{$_}; } if($len > 60) { $list .= "\\\n" . ' 'x$spaces; $len = $spaces; } if(defined($from) and defined($to)) { $file =~ s/$from/$to/; } if(defined($dir)) { $list .= catfile ($dir, $file) . ' '; $len += length($file) + length($dir); } else { $list .= $file . ' '; $len += length($file); } } return $list; } my $includes = file_list(16, undef, undef, undef, %includes); my $lib_obj = file_list(16, $BUILD_LIB_DIR, '.cpp', '.'.$obj_suffix, %src, %added_src); my $check_obj = file_list(16, $BUILD_CHECK_DIR, '.cpp', '.'.$obj_suffix, %check); my $doc_list = file_list(16, undef, undef, undef, %docs); my $remove_patched_files = file_list(16, undef, undef, undef, map { $_ => catdir($MOD_DIR, $patched{$_}) } keys %patched); if(defined($remove_patched_files)) { $remove_patched_files = "$__TAB__\$(RM) $remove_patched_files\n"; } else { $remove_patched_files = ""; }##################### / COMMON CODE (PARTIALLY) ###################### print_header($makefile, $COMMENT_CHAR, 'Compiler Options'); print $makefile <<END_OF_MAKEFILE_HEADER;CXX = $ccLIB_OPT = $lib_optCHECK_OPT = $check_optMACH_OPT = $mach_optLANG_FLAGS = $lang_flagsWARN_FLAGS = $warn_flagsSO_OBJ_FLAGS = $so_objSO_LINK_FLAGS = $so_linkLINK_TO = $link_toEND_OF_MAKEFILE_HEADER print_header($makefile, $COMMENT_CHAR, 'Version Numbers'); print $makefile <<END_OF_VERSIONS;MAJOR = $MAJOR_VERSIONMINOR = $MINOR_VERSIONPATCH = $PATCH_VERSIONVERSION = \$(MAJOR).\$(MINOR).\$(PATCH)END_OF_VERSIONS print_header($makefile, $COMMENT_CHAR, 'Installation Settings'); print $makefile <<END_OF_INSTALL_SETTINGS;INSTALLROOT = $install_rootLIBDIR = \$(INSTALLROOT)/$lib_dirHEADERDIR = \$(INSTALLROOT)/$header_dir/botanDOCDIR = \$(INSTALLROOT)/$doc_dir/botan-\$(VERSION)OWNER = rootGROUP = rootDATA_MODE = 644EXEC_MODE = 755END_OF_INSTALL_SETTINGS print_header($makefile, $COMMENT_CHAR, 'Aliases for Common Programs'); print $makefile <<END_OF_COMMAND_ALIASES;AR = $ar_commandCD = \@cdECHO = \@echoINSTALL = installINSTALL_CMD = \$(INSTALL) -c -o \$(OWNER) -g \$(GROUP) -mLN = ln -fsMKDIR = \@mkdirMKDIR_INSTALL = \@umask 022; mkdir -p -m \$(EXEC_MODE)RANLIB = \@ranlibRM = \@rm -fRM_R = \@rm -rfEND_OF_COMMAND_ALIASES print_header($makefile, $COMMENT_CHAR, 'File Lists'); print $makefile <<END_OF_FILE_LISTS;LIB_FLAGS = $lib_flagsCHECK_FLAGS = \$(CHECK_OPT) \$(LANG_FLAGS) \$(WARN_FLAGS)CHECK = checkDOCS = $doc_listHEADERS = $includesLIBOBJS = $lib_objCHECKOBJS = $check_objLIBRARIES = $libsLIBNAME = libbotanSTATIC_LIB = \$(LIBNAME).$static_lib_suffixEND_OF_FILE_LISTS if($make_shared) { print $makefile <<END_OF_SHARED_LIB_DECL;SHARED_LIB = \$(LIBNAME)-\$(MAJOR).\$(MINOR).\$(PATCH).$so_suffixSONAME = \$(LIBNAME)-\$(MAJOR).\$(MINOR).\$(PATCH).$so_suffixSYMLINK0 = \$(LIBNAME)-\$(MAJOR).\$(MINOR).\$(PATCH).$so_suffixSYMLINK1 = \$(LIBNAME)-\$(MAJOR).\$(MINOR).$so_suffixSYMLINK2 = \$(LIBNAME)-\$(MAJOR).$so_suffixSYMLINK3 = \$(LIBNAME).$so_suffixSYMLINKS = \$(SYMLINK1) \$(SYMLINK2) \$(SYMLINK3)END_OF_SHARED_LIB_DECL } print $makefile "all: \$(LIBRARIES)\n\n"; print_header($makefile, $COMMENT_CHAR, 'Build Commands'); sub print_build_cmds { my ($fh, $dir, $flags, $obj_suffix, %files) = @_; foreach (sort keys %files) { my $src_file = catfile ($files{$_}, $_); my $obj_file = catfile ($dir, $_); $obj_file =~ s/.cpp/.$obj_suffix/; print $fh "$obj_file: $src_file\n", "\t\$(CXX) -Iinclude/ $flags -c \$? -o \$@\n\n"; } } print_build_cmds($makefile, $BUILD_LIB_DIR, '$(LIB_FLAGS)', $obj_suffix, %src, %added_src); print_build_cmds($makefile, $BUILD_CHECK_DIR, '$(CHECK_FLAGS)', $obj_suffix, %check); print_header($makefile, $COMMENT_CHAR, 'Link Commands'); print $makefile <<END_OF_LINK_COMMANDS;\$(CHECK): \$(LIBRARIES) \$(CHECKOBJS)$__TAB__\$(CXX) \$(CHECKOBJS) -L. \$(LINK_TO) -lbotan -o \$(CHECK)$__TAB__\@./\$(CHECK) --validate\$(STATIC_LIB): \$(LIBOBJS)$__TAB__\$(RM) \$(STATIC_LIB)$__TAB__\$(AR) \$(STATIC_LIB) \$(LIBOBJS)END_OF_LINK_COMMANDS if($use_ranlib) { print $makefile "$__TAB__\$(RANLIB) \$(STATIC_LIB)\n\n"; } else { print $makefile "\n"; } if($make_shared) { print $makefile <<END_OF_SO_LINK_COMMAND;\$(SHARED_LIB): \$(LIBOBJS)$__TAB__\$(CXX) \$(SO_LINK_FLAGS) \$(LINK_TO) \$(LIBOBJS) -o \$(SHARED_LIB)$__TAB__\$(LN) \$(SYMLINK0) \$(SYMLINK1)$__TAB__\$(LN) \$(SYMLINK1) \$(SYMLINK2)$__TAB__\$(LN) \$(SYMLINK2) \$(SYMLINK3)END_OF_SO_LINK_COMMAND } print_header($makefile, $COMMENT_CHAR, 'Misc Targets'); print $makefile "static: \$(STATIC_LIB)\n\n"; if($make_shared) { print $makefile "shared: \$(SHARED_LIB)\n\n"; } print_header($makefile, $COMMENT_CHAR, 'Fake Targets'); print $makefile <<END_OF_FAKE_TARGETS;.PHONY = clean distclean installclean:$__TAB__\$(RM_R) $BUILD_LIB_DIR/* $BUILD_CHECK_DIR/*$__TAB__\$(RM) \$(LIBRARIES) \$(SYMLINKS) \$(CHECK)distclean: clean$__TAB__\$(RM_R) $BUILD_DIR $CPP_INCLUDE_DIR$__TAB__\$(RM) $MAKE_FILE $CONFIG_H_FILE$remove_patched_filesEND_OF_FAKE_TARGETS print_header($makefile, $COMMENT_CHAR, 'Install Commands'); print $makefile <<END_OF_INSTALL_SCRIPTS;install: \$(LIBRARIES)$__TAB__\$(ECHO) "Installing Botan into \$(INSTALLROOT)... "$__TAB__\$(MKDIR_INSTALL) \$(DOCDIR)$__TAB__\$(MKDIR_INSTALL) \$(HEADERDIR)$__TAB__\$(CD) \$(INSTALLROOT)/include; \$(LN) botan opencl$__TAB__\$(MKDIR_INSTALL) \$(LIBDIR)$__TAB__\@for i in \$(DOCS); do \\$__TAB__ \$(INSTALL_CMD) \$(DATA_MODE) \$\$i \$(DOCDIR); \\$__TAB__ done$__TAB__\@for i in \$(HEADERS); do \\$__TAB__ \$(INSTALL_CMD) \$(DATA_MODE) \$\$i \$(HEADERDIR); \\$__TAB__ done$__TAB__\@\$(INSTALL_CMD) \$(DATA_MODE) \$(STATIC_LIB) \$(LIBDIR)END_OF_INSTALL_SCRIPTS if($make_shared) { print $makefile <<END_OF_SYMLINKS;$__TAB__\@\$(INSTALL_CMD) \$(EXEC_MODE) \$(SHARED_LIB) \$(LIBDIR)$__TAB__\$(CD) \$(LIBDIR); \$(LN) \$(SYMLINK0) \$(SYMLINK1)$__TAB__\$(CD) \$(LIBDIR); \$(LN) \$(SYMLINK1) \$(SYMLINK2)$__TAB__\$(CD) \$(LIBDIR); \$(LN) \$(SYMLINK2) \$(SYMLINK3)$__TAB__\$(CD) \$(LIBDIR); \$(LN) \$(SYMLINK3) libopencl.soEND_OF_SYMLINKS } else { print $makefile "\n"; }}################################################### Print a NMAKE-style makefile ###################################################sub print_nmake_makefile { my ($makefile, $cc, $lib_opt, $check_opt, $mach_opt, $lang_flags, $warn_flags, undef, # $make_shared undef, # $so_obj undef, # $so_link $obj_suffix, $so_suffix, $static_lib_suffix, undef, # $ar_command undef, # $use_ranlib $src_hash, $check_hash, $include_hash, $patched_hash, $docs, $install_root, $header_dir, $lib_dir, $doc_dir, $lib_list) = @_; ################################################## # Some constants # ################################################## my $__TAB__ = "\t"; my $COMMENT_CHAR = '#'; ################################################## # Convert the references to hashes # ################################################## my %src = %{ $src_hash }; my %includes = %{ $include_hash }; my %check = %{ $check_hash }; my %patched = %{ $patched_hash }; my %docs = %{ $docs }; ################################################## # Generate a few variables # ################################################## my $lib_flags = '$(LIB_OPT) $(MACH_OPT) $(LANG_FLAGS) $(WARN_FLAGS)'; my $libs = '$(STATIC_LIB)';##################### COMMON CODE (PARTIALLY) ###################### my $includes = file_list(16, undef, undef, undef, %includes); my $lib_obj = file_list(16, $BUILD_LIB_DIR, '.cpp', '.'.$obj_suffix, %src, %added_src); my $check_obj = file_list(16, $BUILD_CHECK_DIR, '.cpp', '.'.$obj_suffix, %check); my $doc_list = file_list(16, undef, undef, undef, %docs); my $remove_patched_files = file_list(16, undef, undef, undef, map { $_ => catdir($MOD_DIR, $patched{$_}) } keys %patched); if(defined($remove_patched_files)) { $remove_patched_files = "$__TAB__\$(RM) $remove_patched_files\n"; } else { $remove_patched_files = ""; }##################### / COMMON CODE (PARTIALLY) ###################### print_header($makefile, $COMMENT_CHAR, 'Compiler Options'); print $makefile <<END_OF_MAKEFILE_HEADER;CXX = $ccLIB_OPT = $lib_optCHECK_OPT = $check_optMACH_OPT = $mach_optLANG_FLAGS = $lang_flagsWARN_FLAGS = $warn_flagsSO_OBJ_FLAGS =SO_LINK_FLAGS =LINK_TO =END_OF_MAKEFILE_HEADER print_header($makefile, $COMMENT_CHAR, 'Version Numbers'); print $makefile <<END_OF_VERSIONS;MAJOR = $MAJOR_VERSIONMINOR = $MINOR_VERSIONPATCH = $PATCH_VERSIONVERSION = \$(MAJOR).\$(MINOR).\$(PATCH)END_OF_VERSIONS print_header($makefile, $COMMENT_CHAR, 'Installation Settings'); print $makefile <<END_OF_INSTALL_SETTINGS;INSTALLROOT = $install_rootLIBDIR = \$(INSTALLROOT)\\$lib_dirHEADERDIR = \$(INSTALLROOT)\\$header_dir\\botanDOCDIR = \$(INSTALLROOT)\\$doc_dirEND_OF_INSTALL_SETTINGS print_header($makefile, $COMMENT_CHAR, 'Aliases for Common Programs'); print $makefile <<END_OF_COMMAND_ALIASES;AR = LIBCD = \@cdECHO = \@echoINSTALL = copyINSTALL_CMD = \$(INSTALL)LN = ln -fsMKDIR = \@mdMKDIR_INSTALL = \@mdRM = \@del /QRM_R = \@del /QEND_OF_COMMAND_ALIASES print_header($makefile, $COMMENT_CHAR, 'File Lists'); print $makefile <<END_OF_FILE_LISTS;LIB_FLAGS = $lib_flagsCHECK_FLAGS = \$(CHECK_OPT) \$(LANG_FLAGS) \$(WARN_FLAGS)CHECK = checkDOCS = $doc_listHEADERS = $includesLIBOBJS = $lib_objCHECKOBJS = $check_objLIBRARIES = $libsLIBNAME = libbotanSTATIC_LIB = \$(LIBNAME).$static_lib_suffixEND_OF_FILE_LISTS print $makefile "all: \$(LIBRARIES)\n\n"; print_header($makefile, $COMMENT_CHAR, 'Build Commands'); sub print_build_cmds_nmake { my ($fh, $dir, $flags, $obj_suffix, %files) = @_; foreach (sort keys %files) { my $src_file = catfile ($files{$_}, $_); my $obj_file = catfile ($dir, $_); $obj_file =~ s/.cpp/.$obj_suffix/; print $fh "$obj_file: $src_file\n", "\t\$(CXX) -Iinclude $flags /c \$? /Fo\$@\n\n"; } } print_build_cmds_nmake($makefile, $BUILD_LIB_DIR, '$(LIB_FLAGS)', $obj_suffix, %src, %added_src); print_build_cmds_nmake($makefile, $BUILD_CHECK_DIR, '$(CHECK_FLAGS)', $obj_suffix, %check); print_header($makefile, $COMMENT_CHAR, 'Link Commands'); print $makefile <<END_OF_LINK_COMMANDS;\$(CHECK): \$(LIBRARIES) \$(CHECKOBJS)${__TAB__}LINK /OUT:\$@.exe \$(CHECKOBJS) \$(STATIC_LIB)\$(STATIC_LIB): \$(LIBOBJS)$__TAB__\$(RM) \$(STATIC_LIB)$__TAB__\$(AR) /OUT:\$@ /NAME:BOTAN-\$(VERSION) \$(LIBOBJS)END_OF_LINK_COMMANDS print $makefile "\n"; print_header($makefile, $COMMENT_CHAR, 'Misc Targets'); print $makefile "static: \$(STATIC_LIB)\n\n"; print_header($makefile, $COMMENT_CHAR, 'Fake Targets'); print $makefile <<END_OF_FAKE_TARGETS;clean:$__TAB__\$(RM_R) $BUILD_LIB_DIR\\* $BUILD_CHECK_DIR\\*$__TAB__\$(RM) \$(LIBRARIES) \$(SYMLINKS) \$(CHECK)distclean: clean$__TAB__\$(RM_R) $BUILD_DIR $CPP_INCLUDE_DIR$__TAB__\$(RM) $MAKE_FILE $CONFIG_H_FILE$remove_patched_filesEND_OF_FAKE_TARGETS print_header($makefile, $COMMENT_CHAR, 'Install Commands'); print $makefile <<END_OF_INSTALL_SCRIPTS;install: \$(LIBRARIES)$__TAB__\$(ECHO) "Install command not done"END_OF_INSTALL_SCRIPTS print $makefile "\n";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -