mirror of
				https://github.com/SuperBFG7/ympd
				synced 2025-10-31 13:53:00 +00:00 
			
		
		
		
	added mkdata.pl generator for cross-compiling, fixes #31
This commit is contained in:
		| @@ -32,13 +32,18 @@ file(GLOB RESOURCES | |||||||
| 	htdocs/index.html | 	htdocs/index.html | ||||||
| ) | ) | ||||||
|  |  | ||||||
| add_executable(mkdata htdocs/mkdata.c) | if(CMAKE_CROSSCOMPILING) | ||||||
| set(MKDATA_EXE $<TARGET_FILE:mkdata>) | 	set(MKDATA_EXE ${PROJECT_SOURCE_DIR}/htdocs/mkdata.pl) | ||||||
|  | else() | ||||||
|  | 	set(MKDATA_EXE $<TARGET_FILE:mkdata>) | ||||||
|  | 	set(MKDATA_TARGET mkdata) | ||||||
|  | 	add_executable(mkdata htdocs/mkdata.c) | ||||||
|  | endif() | ||||||
|  |  | ||||||
| add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/assets.c | add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/assets.c | ||||||
| 	COMMAND ${MKDATA_EXE} ${RESOURCES} > ${PROJECT_BINARY_DIR}/assets.c | 	COMMAND ${MKDATA_EXE} ${RESOURCES} > ${PROJECT_BINARY_DIR}/assets.c | ||||||
| 	WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} | 	WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} | ||||||
|     DEPENDS ${RESOURCES} mkdata | 	DEPENDS ${RESOURCES} ${MKDATA_TARGET} | ||||||
| ) | ) | ||||||
|  |  | ||||||
| set(SOURCES | set(SOURCES | ||||||
|   | |||||||
							
								
								
									
										65
									
								
								htdocs/mkdata.pl
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										65
									
								
								htdocs/mkdata.pl
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,65 @@ | |||||||
|  | #!/usr/bin/perl | ||||||
|  | # This program is used to embed arbitrary data into a C binary. It takes | ||||||
|  | # a list of files as an input, and produces a .c data file that contains | ||||||
|  | # contents of all these files as collection of char arrays. | ||||||
|  | # | ||||||
|  | # Usage: perl <this_file> <file1> [file2, ...] > embedded_data.c | ||||||
|  |  | ||||||
|  | use File::Basename; | ||||||
|  |  | ||||||
|  | %mimetypes = ( | ||||||
|  |   js => 'application/javascript', | ||||||
|  |   css => 'text/css', | ||||||
|  |   ico => 'image/vnd.microsoft.icon', | ||||||
|  |   woff => 'application/font-woff', | ||||||
|  |   ttf => 'application/x-font-ttf', | ||||||
|  |   eot => 'application/octet-stream', | ||||||
|  |   svg => 'image/svg+xml', | ||||||
|  |   html => 'text/html' | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | foreach my $i (0 .. $#ARGV) { | ||||||
|  |   open FD, '<:raw', $ARGV[$i] or die "Cannot open $ARGV[$i]: $!\n"; | ||||||
|  |   printf("static const unsigned char v%d[] = {", $i); | ||||||
|  |   my $byte; | ||||||
|  |   my $j = 0; | ||||||
|  |   while (read(FD, $byte, 1)) { | ||||||
|  |     if (($j % 12) == 0) { | ||||||
|  |       print "\n"; | ||||||
|  |     } | ||||||
|  |     printf ' %#04x,', ord($byte); | ||||||
|  |     $j++; | ||||||
|  |   } | ||||||
|  |   print " 0x00\n};\n"; | ||||||
|  |   close FD; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | print <<EOS; | ||||||
|  | #include <stddef.h> | ||||||
|  | #include <string.h> | ||||||
|  | #include <sys/types.h> | ||||||
|  | #include "src/http_server.h" | ||||||
|  |  | ||||||
|  | static const struct embedded_file embedded_files[] = { | ||||||
|  | EOS | ||||||
|  |  | ||||||
|  | foreach my $i (0 .. $#ARGV) { | ||||||
|  |   my ($ext) = $ARGV[$i] =~ /([^.]+)$/; | ||||||
|  |   my $mime = $mimetypes{$ext}; | ||||||
|  |   $ARGV[$i] =~ s/htdocs//; | ||||||
|  |   print "  {\"$ARGV[$i]\", v$i, \"$mime\", sizeof(v$i) - 1},\n"; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | print <<EOS; | ||||||
|  |   {NULL, NULL, NULL, 0} | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | const struct embedded_file *find_embedded_file(const char *name) { | ||||||
|  |   const struct embedded_file *p; | ||||||
|  |   for (p = embedded_files; p->name != NULL; p++) | ||||||
|  |     if (!strcmp(p->name, name)) | ||||||
|  |       return p; | ||||||
|  |   return NULL; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | EOS | ||||||
		Reference in New Issue
	
	Block a user
	 Andrew Karpow
					Andrew Karpow