Jack2  1.9.8
JackCompilerDeps_os.h
00001 /*
00002  Copyright (C) 2004-2008 Grame
00003 
00004  This program is free software; you can redistribute it and/or modify
00005  it under the terms of the GNU Lesser General Public License as published by
00006  the Free Software Foundation; either version 2.1 of the License, or
00007  (at your option) any later version.
00008 
00009  This program is distributed in the hope that it will be useful,
00010  but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012  GNU Lesser General Public License for more details.
00013 
00014  You should have received a copy of the GNU Lesser General Public License
00015  along with this program; if not, write to the Free Software
00016  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
00017 
00018  */
00019 
00020 
00021 #ifndef __JackCompilerDeps_WIN32__
00022 #define __JackCompilerDeps_WIN32__
00023 
00024 #if __GNUC__
00025     #define PRE_PACKED_STRUCTURE
00026 
00027     #ifndef POST_PACKED_STRUCTURE
00028         /* POST_PACKED_STRUCTURE needs to be a macro which
00029         expands into a compiler directive. The directive must
00030         tell the compiler to arrange the preceding structure
00031         declaration so that it is packed on byte-boundaries rather
00032         than use the natural alignment of the processor and/or
00033         compiler.
00034         */
00035         #if (__GNUC__< 4)  /* Does not seem to work with GCC 3.XX serie */
00036             #define POST_PACKED_STRUCTURE
00037         #elif defined(JACK_32_64)
00038             #define POST_PACKED_STRUCTURE __attribute__((__packed__))
00039         #else
00040             #define POST_PACKED_STRUCTURE
00041         #endif
00042     #endif
00043         #define MEM_ALIGN(x,y) x __attribute__((aligned(y)))
00044         #define LIB_EXPORT __declspec(dllexport)
00045     #ifdef SERVER_SIDE
00046         #define SERVER_EXPORT __declspec(dllexport)
00047     #else
00048         #define SERVER_EXPORT
00049     #endif
00050 #else
00051     #define MEM_ALIGN(x,y) x
00052     #define     LIB_EXPORT __declspec(dllexport)
00053     #ifdef SERVER_SIDE
00054         #define SERVER_EXPORT __declspec(dllexport)
00055     #else
00056         #define SERVER_EXPORT
00057     #endif
00058 
00059     #ifdef _MSC_VER
00060        #if defined(JACK_32_64)
00061             #define PRE_PACKED_STRUCTURE1 __pragma(pack(push,1))
00062             #define PRE_PACKED_STRUCTURE    PRE_PACKED_STRUCTURE1
00063             /* PRE_PACKED_STRUCTURE needs to be a macro which
00064             expands into a compiler directive. The directive must
00065             tell the compiler to arrange the following structure
00066             declaration so that it is packed on byte-boundaries rather
00067             than use the natural alignment of the processor and/or
00068             compiler.
00069             */
00070             #define POST_PACKED_STRUCTURE ;__pragma(pack(pop))
00071             /* and POST_PACKED_STRUCTURE needs to be a macro which
00072             restores the packing to its previous setting */
00073        #else
00074             #define PRE_PACKED_STRUCTURE
00075             #define POST_PACKED_STRUCTURE
00076         #endif
00077     #else
00078         /* Other Windows compilers to go here */
00079         #define PRE_PACKED_STRUCTURE
00080         #define POST_PACKED_STRUCTURE
00081     #endif
00082 #endif
00083 
00084 #endif