view test/automated/SDL_at.h @ 5130:f2c2f0ecba5f

Fixed bug #1111 kwm@rainbow-runner.nl 2011-01-30 06:28:27 PST Created attachment 562 [details] Build fix with clang. When building sdl 1.2.14 with the Clang compiler http://clang.llvm.org . The build fails in src/video/mmx.h with the following error: -------------------------------------------------- ./src/video/SDL_RLEaccel.c:831:5: error: invalid operand for instruction CHOOSE_BLIT(RLECLIPBLIT, alpha, fmt); ^ ./src/video/SDL_RLEaccel.c:831:17: note: instantiated from: CHOOSE_BLIT(RLECLIPBLIT, alpha, fmt); ^ ./src/video/SDL_RLEaccel.c:831:5: note: instantiated from: CHOOSE_BLIT(RLECLIPBLIT, alpha, fmt); ^ ./src/video/SDL_RLEaccel.c:647:23: note: instantiated from: blitter(2, Uint8, ALPHA_BLIT16_565MMX); \ ^ ./src/video/SDL_RLEaccel.c:282:4: note: instantiated from: movq_r2m(mm3, *dstp); \ ^ In file included from ./src/video/SDL_RLEaccel.c:99: ./src/video/mmx.h:379:28: note: instantiated from: #define movq_r2m(reg, var) mmx_r2m(movq, reg, var) ^ <scratch space>:192:1: note: instantiated from: "movq" ^ <inline asm>:1:2: note: instantiated into assembly here movq %mm3, %dx ^ -------------------------------------------------- According to the clang developers this is a invalid inline assembly. Using the attached patch from the last commit in the below bug report fixes the compile. More details from: http://llvm.org/bugs/show_bug.cgi?id=6730
author Sam Lantinga <slouken@libsdl.org>
date Sun, 30 Jan 2011 13:42:05 -0800
parents 78db4f7ae2f3
children
line wrap: on
line source

/*
 * Common code for automated test suite.
 *
 * Written by Edgar Simo "bobbens"
 *
 * Released under Public Domain.
 */


/**
 * @file SDL_at.h
 *
 * @brief Handles automatic testing functionality.
 *
 * The basic approach with SDL_AT is to divide the tests into what are called
 *  test suites and test cases. Each test suite should have multiple test
 *  cases, each test case can have multiple asserts.
 *
 * To actually test for conditions within the testcase you check asserts, if
 *  the asserts fail the failures will be logged in the testsuite and
 *  displayed.
 *
 *  Syntax is similar to OpenGL. An example would be:
 *
 * @code
 * int f; // Number failed
 * SDL_ATinit( "My testsuite" );
 *
 * SDL_ATbegin( "My first testcase" );
 * if (!SDL_ATassert( (1+1)==2, "Trying '1+1=2'."))
 *    return; // Implicitly calls SDL_ATend if assert fails
 * SDL_ATend(); // Finish testcase
 *
 * SDL_ATbegin( "My second testcase" );
 * if (!SDL_ATassert( (4/2)==2, "Trying '4/2=2'."))
 *    return; // Implicitly calls SDL_ATend if assert fails
 * SDL_ATend(); // Finish testcase
 *
 * f = SDL_ATfinish();
 * @endcode
 *
 * @author Edgar Simo "bobbens"
 */


#ifndef _SDL_AT_H
#  define _SDL_AT_H



enum {
   SDL_AT_VERBOSE, /**< Sets the verbose level. */
   SDL_AT_QUIET /**< Sets quietness. */
};


/*
 * Suite level actions.
 */
/**
 * @brief Starts the testsuite.
 *
 *    @param suite Name of the suite to start testing.
 */
void SDL_ATinit( const char *suite );
/**
 * @brief Finishes the testsuite printing out global results if verbose.
 *
 *    @return 0 if no errors occurred, otherwise number of failures.
 */
int SDL_ATfinish (void);
/**
 * @brief Sets a global property value.
 *
 *    @param property Property to set.
 *    @param value Value to set property to.
 */
void SDL_ATseti( int property, int value );
/**
 * @brief Gets a global property value.
 *
 *    @param property Property to get.
 *    @param[out] value Value of the property.
 */
void SDL_ATgeti( int property, int *value );


/*
 * Testcase level actions.
 */
/**
 * @brief Begins a testcase.
 *
 *    @param testcase Name of the testcase to begin.
 */
void SDL_ATbegin( const char *testcase );
/**
 * @brief Checks a condition in the testcase.
 *
 * Will automatically call SDL_ATend if the condition isn't met.
 *
 *    @param condition Condition to make sure is true.
 *    @param msg Message to display for failure.
 *    @return Returns 1 if the condition isn't met.
 */
int SDL_ATassert( const char *msg, int condition );
/**
 * @brief Checks a condition in the testcase.
 *
 * Will automatically call SDL_ATend if the condition isn't met.
 *
 *    @param condition Condition to make sure is true.
 *    @param msg Message to display for failure with printf style formatting.
 *    @return Returns 1 if the condition isn't met.
 */
int SDL_ATvassert( int condition, const char *msg, ... );
/**
 * @brief Ends a testcase.
 */
void SDL_ATend (void);


/*
 * Misc functions.
 */
/**
 * @brief Prints an error.
 *
 *    @param msg printf formatted string to display.
 *    @return Number of character printed.
 */
int SDL_ATprintErr( const char *msg, ... );
/**
 * @brief Prints some text.
 *
 *    @param msg printf formatted string to display.
 *    @return Number of character printed.
 */
int SDL_ATprint( const char *msg, ... );
/**
 * @brief Prints some verbose text.
 *
 * Verbosity levels are as follows:
 *
 *  - 0 standard stdout, enabled by default
 *  - 1 additional information
 *  - 2 detailed information (spammy)
 *
 *    @param level Level of verbosity to print at.
 *    @param msg printf formatted string to display.
 *    @return Number of character printed.
 */
int SDL_ATprintVerbose( int level, const char *msg, ... );


#endif /* _SDL_AT_H */