Document test data makefile
diff --git a/tests/data_files/Makefile b/tests/data_files/Makefile
index 9604b05..f7826d4 100644
--- a/tests/data_files/Makefile
+++ b/tests/data_files/Makefile
@@ -1,16 +1,39 @@
-OPENSSL = openssl
+## This file contains a record of how some of the test data was
+## generated. The final build products are committed to the repository
+## as well to make sure that the test data is identical. You do not
+## need to use this makefile unless you're extending mbed TLS's tests.
-cli_crt_key_file_rsa = cli-rsa.key
-cli_crt_extensions_file = cli.opensslconf
-test_ca_key_file_rsa = test-ca.key
-test_ca_pwd_rsa = PolarSSLTest
-test_ca_config_file = test-ca.opensslconf
+## Many data files were generated prior to the existence of this
+## makefile, so the method of their generation was not recorded.
+## Note that in addition to depending on the version of the data
+## generation tool, many of the build outputs are randomized, so
+## running this makefile twice would not produce the same results.
+
+## Tools
+OPENSSL ?= openssl
+
+## Build the generated test data. Note that since the final outputs
+## are committed to the repository, this target should do nothing on a
+## fresh checkout. Furthermore, since the generation is randomized,
+## re-running the same targets may result in differing files. The goal
+## of this makefile is primarily to serve as a record of how the
+## targets were generated in the first place.
default: all_final
all_intermediate := # temporary files
all_final := # files used by tests
+
+
+################################################################
+#### Generate certificates from existing keys
+################################################################
+
+test_ca_key_file_rsa = test-ca.key
+test_ca_pwd_rsa = PolarSSLTest
+test_ca_config_file = test-ca.opensslconf
+
test-ca.csr: $(test_ca_key_file_rsa) $(test_ca_config_file)
$(OPENSSL) req -new -config $(test_ca_config_file) -key $(test_ca_key_file_rsa) -passin "pass:$(test_ca_pwd_rsa)" -subj "/C=NL/O=PolarSSL/CN=PolarSSL Test CA" -out $@
all_intermediate += test-ca.csr
@@ -21,6 +44,9 @@
$(OPENSSL) req -x509 -config $(test_ca_config_file) -key $(test_ca_key_file_rsa) -passin "pass:$(test_ca_pwd_rsa)" -set_serial 0 -days 3653 -sha256 -in test-ca.csr -out $@
all_final += test-ca-sha256.crt
+cli_crt_key_file_rsa = cli-rsa.key
+cli_crt_extensions_file = cli.opensslconf
+
cli-rsa.csr: $(cli_crt_key_file_rsa)
$(OPENSSL) req -new -key $(cli_crt_key_file_rsa) -passin "pass:$(test_ca_pwd_rsa)" -subj "/C=NL/O=PolarSSL/CN=PolarSSL Client 2" -out $@
all_intermediate += cli-rsa.csr
@@ -39,9 +65,16 @@
all_final += server2-sha256.crt
+
+################################################################
+#### Meta targets
+################################################################
+
all_final: $(all_final)
all: $(all_intermediate) $(all_final)
+.PHONY: default all_final all
+
# These files should not be committed to the repository.
list_intermediate:
@printf '%s\n' $(all_intermediate) | sort
@@ -50,8 +83,12 @@
# third-party tools.
list_final:
@printf '%s\n' $(all_final) | sort
+.PHONY: list_intermediate list_final
+## Remove intermediate files
clean:
rm -f $(all_intermediate)
+## Remove all build products, even the ones that are committed
neat: clean
rm -f $(all_final)
+.PHONY: clean neat
diff --git a/tests/data_files/print_c.pl b/tests/data_files/print_c.pl
index b584578..d0ec137 100755
--- a/tests/data_files/print_c.pl
+++ b/tests/data_files/print_c.pl
@@ -1,10 +1,19 @@
#!/usr/bin/env perl
-# Usage:
-# print_c mbedtls_test_foo <file.pem
-# print_c TEST_FOO mbedtls_test_foo <file.pem
use strict;
use warnings;
+if (!@ARGV || $ARGV[0] == '--help') {
+ print <<EOF;
+Usage: $0 mbedtls_test_foo <file.pem
+ $0 TEST_FOO mbedtls_test_foo <file.pem
+Print out a PEM file as C code defining a string constant.
+
+Used to include some of the test data in /library/certs.c for
+self-tests and sample programs.
+EOF
+ exit;
+}
+
my $pp_name = @ARGV > 1 ? shift @ARGV : undef;
my $name = shift @ARGV;