# HG changeset patch # User Paul Boddie # Date 1677620032 -3600 # Node ID d05994c8d1fe1e7e79a1932ac8ca582b2b49e3b1 # Parent 590a9d7e25095d9427229712428531698a158484 Switched from using "#pragma once" to defining and testing interface-specific identifiers so that multiple copies of any given header file can be deployed without these being treated as distinct files. diff -r 590a9d7e2509 -r d05994c8d1fe program.c --- a/program.c Sun Jan 15 17:36:19 2023 +0100 +++ b/program.c Tue Feb 28 22:33:52 2023 +0100 @@ -1,7 +1,7 @@ /* * Code generation from interface descriptions. * - * Copyright (C) 2019, 2020, 2022 Paul Boddie + * Copyright (C) 2019, 2020, 2022, 2023 Paul Boddie * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -132,17 +132,19 @@ iface->output_basename); if (client_header_fp != NULL) - fputs(header_prologue, client_header_fp); + fprintf(client_header_fp, header_prologue, "CLIENT", iface->name, + "CLIENT", iface->name); if (server_fp != NULL) fprintf(server_fp, server_prologue, iface->output_basename, iface->output_basename); if (server_header_fp != NULL) - fputs(server_header_prologue, server_header_fp); + fprintf(server_header_fp, server_header_prologue, iface->name, iface->name); if (interface_fp != NULL) - fputs(header_prologue, interface_fp); + fprintf(interface_fp, header_prologue, "INTERFACE", iface->name, + "INTERFACE", iface->name); /* Write the interface details. */ @@ -156,16 +158,25 @@ fclose(client_fp); if (client_header_fp != NULL) + { + fprintf(client_header_fp, header_epilogue); fclose(client_header_fp); + } if (server_fp != NULL) fclose(server_fp); if (server_header_fp != NULL) + { + fprintf(server_header_fp, header_epilogue); fclose(server_header_fp); + } if (interface_fp != NULL) + { + fprintf(interface_fp, header_epilogue); fclose(interface_fp); + } } /* Generate source file content corresponding to each interface in turn. */ @@ -265,3 +276,6 @@ if (interface_fp != NULL) write_interface_definition(iface, SERVER_ROLE, interface_fp); } + +/* vim: tabstop=2 expandtab shiftwidth=2 +*/ diff -r 590a9d7e2509 -r d05994c8d1fe templates.h --- a/templates.h Sun Jan 15 17:36:19 2023 +0100 +++ b/templates.h Tue Feb 28 22:33:52 2023 +0100 @@ -1,7 +1,7 @@ /* * Template output. * - * Copyright (C) 2019, 2020, 2021, 2022 Paul Boddie + * Copyright (C) 2019, 2020, 2021, 2022, 2023 Paul Boddie * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -185,19 +185,24 @@ -/* General header template. */ +/* General header templates. */ #define header_prologue \ -"#pragma once\n\n" \ +"#ifndef __%s__%s__\n" \ +"#define __%s__%s__\n\n" \ "#include \n" \ "#include \n" +#define header_epilogue \ +"#endif\n" + /* Server templates. */ #define server_header_prologue \ -"#pragma once\n\n" \ +"#ifndef __SERVER__%s__\n" \ +"#define __SERVER__%s__\n\n" \ "#include \n" \ "#include \n"