2016-09-22 12:57:27 +08:00
# include "vcpkg_Commands.h"
# include "vcpkg_System.h"
# include "vcpkg.h"
2016-11-08 08:06:36 +08:00
# include "Paragraphs.h"
2016-09-22 12:57:27 +08:00
namespace fs = std : : tr2 : : sys ;
namespace vcpkg
{
2016-11-08 05:57:52 +08:00
static std : : vector < SourceParagraph > read_all_source_paragraphs ( const vcpkg_paths & paths )
2016-09-22 12:57:27 +08:00
{
2016-11-08 05:57:52 +08:00
std : : vector < SourceParagraph > output ;
2016-09-22 13:14:02 +08:00
for ( auto it = fs : : directory_iterator ( paths . ports ) ; it ! = fs : : directory_iterator ( ) ; + + it )
2016-09-22 12:57:27 +08:00
{
2016-09-22 13:14:02 +08:00
const fs : : path & path = it - > path ( ) ;
2016-09-22 12:57:27 +08:00
try
{
2016-11-08 08:06:36 +08:00
auto pghs = Paragraphs : : get_paragraphs ( path / " CONTROL " ) ;
2016-09-22 12:57:27 +08:00
if ( pghs . empty ( ) )
2016-09-22 13:47:36 +08:00
{
2016-11-08 05:57:52 +08:00
continue ;
2016-09-22 13:47:36 +08:00
}
2016-11-08 05:57:52 +08:00
auto srcpgh = SourceParagraph ( pghs [ 0 ] ) ;
output . push_back ( srcpgh ) ;
2016-09-22 12:57:27 +08:00
}
catch ( std : : runtime_error const & )
{
}
}
2016-11-08 05:57:52 +08:00
return output ;
}
static void do_print ( const SourceParagraph & source_paragraph )
{
2016-11-08 06:42:25 +08:00
System : : println ( " %-20s %-16s %s " ,
source_paragraph . name ,
source_paragraph . version ,
shorten_description ( source_paragraph . description ) ) ;
2016-09-22 13:47:36 +08:00
}
void search_command ( const vcpkg_cmd_arguments & args , const vcpkg_paths & paths )
{
2016-10-01 02:24:04 +08:00
static const std : : string example = Strings : : format ( " The argument should be a substring to search for, or no argument to display all libraries. \n %s " , create_example_string ( " search png " ) ) ;
args . check_max_arg_count ( 1 , example . c_str ( ) ) ;
2016-11-08 05:57:52 +08:00
const std : : vector < SourceParagraph > source_paragraphs = read_all_source_paragraphs ( paths ) ;
2016-09-22 13:47:36 +08:00
if ( args . command_arguments . size ( ) = = 0 )
{
2016-11-08 05:57:52 +08:00
for ( const SourceParagraph & source_paragraph : source_paragraphs )
{
do_print ( source_paragraph ) ;
}
2016-09-22 13:47:36 +08:00
}
2016-11-08 05:57:52 +08:00
else
{
// At this point there is 1 argument
for ( const SourceParagraph & source_paragraph : source_paragraphs )
{
if ( Strings : : case_insensitive_ascii_find ( source_paragraph . name , args . command_arguments [ 0 ] ) = = source_paragraph . name . end ( ) )
{
continue ;
}
2016-09-22 13:47:36 +08:00
2016-11-08 05:57:52 +08:00
do_print ( source_paragraph ) ;
}
}
2016-09-22 12:57:27 +08:00
System : : println ( " \n If your library is not listed, please open an issue at: \n "
" https://github.com/Microsoft/vcpkg/issues " ) ;
exit ( EXIT_SUCCESS ) ;
}
}