mirror of
https://github.com/reactos/CMake.git
synced 2024-12-13 22:58:41 +00:00
612d6f29f8
Refactor the library code used in the GenerateExportHeader test to use an improved naming convention that more directly identifies what it being tested, making use of namespaces to avoid possible symbol collisions. This also eliminates duplicate cases such as `libshared()` and `libshared_not_exported()` which had the same decoration, and adds consistent pairings of <name>_EXPORT and <name>_DEPRECATED_EXPORT which were missing previously. The data tests from the previous commit are also added to `libstatic` and `libshared_and_static` for consistency. Note that there are no exported members of exported classes, as these are not allowed on Windows.
170 lines
4.2 KiB
C++
170 lines
4.2 KiB
C++
|
|
#include "libshared.h"
|
|
|
|
#include "libstatic.h"
|
|
|
|
#include <fstream>
|
|
#include <iostream>
|
|
#include <stdlib.h>
|
|
#include <string>
|
|
|
|
void compare(const char* refName, const char* testName)
|
|
{
|
|
std::ifstream ref;
|
|
ref.open(refName);
|
|
if (!ref.is_open()) {
|
|
std::cout << "Could not open \"" << refName << "\"." << std::endl;
|
|
exit(1);
|
|
}
|
|
std::ifstream test;
|
|
test.open(testName);
|
|
if (!test.is_open()) {
|
|
std::cout << "Could not open \"" << testName << "\"." << std::endl;
|
|
exit(1);
|
|
}
|
|
|
|
while (!ref.eof() && !test.eof()) {
|
|
std::string refLine;
|
|
std::string testLine;
|
|
std::getline(ref, refLine);
|
|
std::getline(test, testLine);
|
|
// Some very old Borland runtimes (C++ Builder 5 WITHOUT Update 1) add a
|
|
// trailing null to the string that we need to strip before testing for a
|
|
// trailing space.
|
|
if (refLine.size() && refLine[refLine.size() - 1] == 0) {
|
|
refLine = refLine.substr(0, refLine.size() - 1);
|
|
}
|
|
if (testLine.size() && testLine[testLine.size() - 1] == 0) {
|
|
testLine = testLine.substr(0, testLine.size() - 1);
|
|
}
|
|
// The reference files never have trailing spaces:
|
|
if (testLine.size() && testLine[testLine.size() - 1] == ' ') {
|
|
testLine = testLine.substr(0, testLine.size() - 1);
|
|
}
|
|
if (refLine != testLine) {
|
|
std::cout << "Ref and test are not the same:\n Ref: \"" << refLine
|
|
<< "\"\n Test: \"" << testLine << "\"\n";
|
|
exit(1);
|
|
}
|
|
}
|
|
if (!ref.eof() || !test.eof()) {
|
|
std::cout << "Ref and test have differing numbers of lines.";
|
|
exit(1);
|
|
}
|
|
}
|
|
|
|
int main()
|
|
{
|
|
{
|
|
libshared::Class l;
|
|
// l.method(); LINK ERROR
|
|
l.method_exported();
|
|
// l.method_deprecated(); LINK ERROR
|
|
l.method_deprecated_exported();
|
|
// l.method_excluded(); LINK ERROR
|
|
|
|
// use_int(l.data); LINK ERROR
|
|
use_int(l.data_exported);
|
|
// use_int(l.data_excluded); LINK ERROR
|
|
}
|
|
|
|
{
|
|
libshared::ExportedClass l;
|
|
l.method();
|
|
l.method_deprecated();
|
|
#if defined(_WIN32) || defined(__CYGWIN__)
|
|
l.method_excluded();
|
|
#else
|
|
// l.method_excluded(); LINK ERROR (NOT WIN32 AND NOT CYGWIN)
|
|
#endif
|
|
|
|
use_int(l.data);
|
|
#if defined(_WIN32) || defined(__CYGWIN__)
|
|
use_int(l.data_excluded);
|
|
#else
|
|
// use_int(l.data_excluded); LINK ERROR (NOT WIN32 AND NOT CYGWIN)
|
|
#endif
|
|
}
|
|
|
|
{
|
|
libshared::ExcludedClass l;
|
|
// l.method(); LINK ERROR
|
|
l.method_exported();
|
|
// l.method_deprecated(); LINK ERROR
|
|
l.method_deprecated_exported();
|
|
// l.method_excluded(); LINK ERROR
|
|
|
|
// use_int(l.data); LINK ERROR
|
|
use_int(l.data_exported);
|
|
// use_int(l.data_excluded); LINK ERROR
|
|
}
|
|
|
|
// libshared::function(); LINK ERROR
|
|
libshared::function_exported();
|
|
// libshared::function_deprecated(); LINK ERROR
|
|
libshared::function_deprecated_exported();
|
|
// libshared::function_excluded(); LINK ERROR
|
|
|
|
// use_int(libshared::data); LINK ERROR
|
|
use_int(libshared::data_exported);
|
|
// use_int(libshared::data_excluded); LINK ERROR
|
|
|
|
{
|
|
libstatic::Class l;
|
|
l.method();
|
|
l.method_exported();
|
|
l.method_deprecated();
|
|
l.method_deprecated_exported();
|
|
l.method_excluded();
|
|
|
|
use_int(l.data);
|
|
use_int(l.data_exported);
|
|
use_int(l.data_excluded);
|
|
}
|
|
|
|
{
|
|
libstatic::ExportedClass l;
|
|
l.method();
|
|
l.method_exported();
|
|
l.method_deprecated();
|
|
l.method_deprecated_exported();
|
|
l.method_excluded();
|
|
|
|
use_int(l.data);
|
|
use_int(l.data_exported);
|
|
use_int(l.data_excluded);
|
|
}
|
|
|
|
{
|
|
libstatic::ExcludedClass l;
|
|
l.method();
|
|
l.method_exported();
|
|
l.method_deprecated();
|
|
l.method_deprecated_exported();
|
|
l.method_excluded();
|
|
|
|
use_int(l.data);
|
|
use_int(l.data_exported);
|
|
use_int(l.data_excluded);
|
|
}
|
|
|
|
libstatic::function();
|
|
libstatic::function_exported();
|
|
libstatic::function_deprecated();
|
|
libstatic::function_deprecated_exported();
|
|
libstatic::function_excluded();
|
|
|
|
use_int(libstatic::data);
|
|
use_int(libstatic::data_exported);
|
|
use_int(libstatic::data_excluded);
|
|
|
|
#if defined(SRC_DIR) && defined(BIN_DIR)
|
|
compare(SRC_DIR "/libshared_export.h",
|
|
BIN_DIR "/libshared/libshared_export.h");
|
|
compare(SRC_DIR "/libstatic_export.h",
|
|
BIN_DIR "/libstatic/libstatic_export.h");
|
|
#endif
|
|
|
|
return 0;
|
|
}
|