From e4bd005daf2e3e3c7cb4dfa38e9bde7a578f08e0 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Fri, 14 Jun 2013 00:10:37 +0200 Subject: [PATCH] Update jpeg package * Also make use of new build feature rules. * Since the hacky long_jump_buffer field has been removed from the jpeg_error_mgr struct in the new package, the structure is now wrapped in the JPEGTranslator code to achieve the same behavior. --- build/jam/BuildFeatures | 47 +++++++------------ build/jam/HaikuImage | 1 - build/jam/OptionalPackageDependencies | 8 ++-- build/jam/OptionalPackages | 22 +++++++++ build/jam/packages/Haiku | 13 ----- build/jam/packages/HaikuDevel | 2 - .../translators/jpeg/JPEGTranslator.cpp | 11 +++-- src/add-ons/translators/jpeg/JPEGTranslator.h | 10 ---- src/add-ons/translators/jpeg/Jamfile | 11 +++-- src/add-ons/translators/jpeg/be_jerror.cpp | 13 +++-- src/add-ons/translators/jpeg/be_jerror.h | 28 +++++++++++ src/libs/tiff/Jamfile | 9 ++-- 12 files changed, 99 insertions(+), 76 deletions(-) create mode 100644 src/add-ons/translators/jpeg/be_jerror.h diff --git a/build/jam/BuildFeatures b/build/jam/BuildFeatures index 788c5140f5..c909e01a2e 100644 --- a/build/jam/BuildFeatures +++ b/build/jam/BuildFeatures @@ -550,44 +550,31 @@ if $(TARGET_ARCH) in arm ppc x86 x86_64 { local jpegBaseURL = $(baseURL)/lib ; if $(TARGET_ARCH) in arm ppc x86 x86_64 { if $(TARGET_ARCH) = arm { - HAIKU_JPEG_FILE = jpeg-8d-arm-2012-11-21.zip ; + HAIKU_JPEG_PACKAGE = jpeg-8d-arm-2012-11-21.zip ; } else if $(TARGET_ARCH) = ppc { - HAIKU_JPEG_FILE = jpeg-8d-ppc-gcc4-2012-08-27.zip ; + HAIKU_JPEG_PACKAGE = jpeg-8d-ppc-gcc4-2012-08-27.zip ; } else if $(TARGET_ARCH) = x86_64 { - HAIKU_JPEG_FILE = jpeg-8d-x86_64-2012-11-18.zip ; + HAIKU_JPEG_PACKAGE = jpeg-8d-x86_64-2012-11-18.zip ; } else if $(HAIKU_GCC_VERSION[1]) >= 4 { - HAIKU_JPEG_FILE = jpeg-8d-x86-gcc4-2012-08-23.zip ; + HAIKU_JPEG_PACKAGE = jpeg-8d-x86-gcc4-2012-08-23.zip ; } else { - HAIKU_JPEG_FILE = jpeg-8d-x86-gcc2-2012-08-23.zip ; + HAIKU_JPEG_PACKAGE = jpeg-9-2-x86_gcc2.hpkg ; + HAIKU_JPEG_DEVEL_PACKAGE = jpeg_devel-9-2-x86_gcc2.hpkg ; } - local jpegZipFile = [ DownloadFile $(HAIKU_JPEG_FILE) - : $(jpegBaseURL)/$(HAIKU_JPEG_FILE) ] ; + HAIKU_JPEG_URL = $(hpkgBaseURL)/$(HAIKU_JPEG_PACKAGE) ; + HAIKU_JPEG_DEVEL_URL = $(hpkgBaseURL)/$(HAIKU_JPEG_DEVEL_PACKAGE) ; - HAIKU_JPEG_DIR = [ FDirName $(HAIKU_OPTIONAL_BUILD_PACKAGES_DIR) - $(HAIKU_JPEG_FILE:B) ] ; + ExtractBuildFeatureArchives jpeg : + file: base $(HAIKU_JPEG_URL) + runtime: lib + file: devel $(HAIKU_JPEG_DEVEL_URL) + depends: base + library: develop/lib/libjpeg.so + headers: develop/headers + ; - HAIKU_JPEG_HEADERS_DEPENDENCY = [ ExtractArchive $(HAIKU_JPEG_DIR) - : common/include : $(jpegZipFile) - : extracted-jpeg ] ; - - HAIKU_JPEG_LIB = [ ExtractArchive $(HAIKU_JPEG_DIR) - : - common/lib/libjpeg.so - : $(jpegZipFile) - : extracted-jpeg ] ; - HAIKU_JPEG_CURRENT_LIB = [ ExtractArchive $(HAIKU_JPEG_DIR) - : - common/lib/libjpeg.so.8.4.0 - : $(jpegZipFile) - : extracted-jpeg ] ; - Depends $(HAIKU_JPEG_LIB) $(HAIKU_JPEG_CURRENT_LIB) : $(HAIKU_JPEG_HEADERS_DEPENDENCY) ; - - HAIKU_JPEG_CURRENT_LINK = libjpeg.so.8 ; - - HAIKU_JPEG_HEADERS = [ FDirName $(HAIKU_JPEG_DIR) common include ] ; - - EnableBuildFeatures libjpeg ; + EnableBuildFeatures jpeg ; } else { Echo "jpeg support not available on $(TARGET_ARCH)" ; } diff --git a/build/jam/HaikuImage b/build/jam/HaikuImage index 149bdb9c19..9a83ddbef3 100644 --- a/build/jam/HaikuImage +++ b/build/jam/HaikuImage @@ -76,7 +76,6 @@ SYSTEM_LIBS = [ FFilterByBuildFeatures $(HAIKU_SHARED_LIBSTDC++) $(HAIKU_SHARED_LIBSUPC++) ] ; PRIVATE_SYSTEM_LIBS = [ FFilterByBuildFeatures - $(HAIKU_JPEG_CURRENT_LIB) libalm.so libfluidsynth.so libilmimf.so diff --git a/build/jam/OptionalPackageDependencies b/build/jam/OptionalPackageDependencies index 38f7e1c1b8..c07f9290bb 100644 --- a/build/jam/OptionalPackageDependencies +++ b/build/jam/OptionalPackageDependencies @@ -12,7 +12,7 @@ OptionalPackageDependencies CDRecord : GetTextLibintl LibIconv ; OptionalPackageDependencies Curl : OpenSSL ; OptionalPackageDependencies DevelopmentBase : CDRecord DevelopmentMin Yasm ; OptionalPackageDependencies Development : - DevelopmentBase FFMpeg-devel FreeType-devel GLU-devel Libpng-devel Perl + DevelopmentBase FFMpeg-devel FreeType-devel GLU-devel Jpeg Libpng-devel Perl Zlib-devel ; OptionalPackageDependencies DevelopmentPowerPC : DevelopmentMin ; @@ -47,5 +47,7 @@ OptionalPackageDependencies wpa_supplicant : OpenSSL ; OptionalPackageDependencies XZ-Utils : Tar ; OptionalPackageDependencies Zlib-devel : Zlib ; -OptionalPackageDependencies MandatoryPackages - : Bzip Ctags FFMpeg FreeType GLU Grep ICU Libpng LibSolv Mesa Sed Tar Zlib ; +OptionalPackageDependencies MandatoryPackages : + Bzip Ctags FFMpeg FreeType GLU Grep ICU Jpeg Libpng LibSolv Mesa Sed Tar + Zlib + ; diff --git a/build/jam/OptionalPackages b/build/jam/OptionalPackages index bf9dbbd3f0..2ab408869b 100644 --- a/build/jam/OptionalPackages +++ b/build/jam/OptionalPackages @@ -60,6 +60,8 @@ # Groff - text formatter used for man pages # HGrep - header grep tool # ICU-devel - the headers and lib-links for ICU (for development) +# Jpeg - JPEG image compression library and tools +# Jpeg-devel - the Jpeg development files # KeymapSwitcher - Easy to use keymap switcher # LGrep - Library Grep tool # LibEdit - A BSD licensed replacement for GNU readline @@ -1131,6 +1133,26 @@ if [ IsOptionalHaikuImagePackageAdded ICU-devel ] { } +# Jpeg +if [ IsOptionalHaikuImagePackageAdded Jpeg ] { + if $(TARGET_ARCH) in arm ppc x86 x86_64 { + InstallOptionalHaikuImagePackage $(HAIKU_JPEG_URL) : system ; + } else { + Echo "No optional package Jpeg available for $(TARGET_ARCH)" ; + } +} + + +# Jpeg-devel +if [ IsOptionalHaikuImagePackageAdded Jpeg-devel ] { + if $(TARGET_ARCH) in arm ppc x86 x86_64 { + InstallOptionalHaikuImagePackage $(HAIKU_JPEG_DEVEL_URL) : system ; + } else { + Echo "No optional package Jpeg-devel available for $(TARGET_ARCH)" ; + } +} + + # KeymapSwitcher if [ IsOptionalHaikuImagePackageAdded KeymapSwitcher ] { if $(TARGET_ARCH) = x86 { diff --git a/build/jam/packages/Haiku b/build/jam/packages/Haiku index f051a34c25..bef7d7fdcc 100644 --- a/build/jam/packages/Haiku +++ b/build/jam/packages/Haiku @@ -102,19 +102,6 @@ SYSTEM_LIBS_ALIASES = libnetapi.so ; -OPTIONAL_LIBS_ALIASES = - libjpeg.so - libz.so -; - -# TODO: Remove the following symlinks when the libraries have been packaged -# properly! -# libjpeg.so links to the current libjpeg -AddSymlinkToPackage lib : $(HAIKU_JPEG_CURRENT_LIB:BS) - : $(HAIKU_JPEG_CURRENT_LINK) : : true ; -AddSymlinkToPackage lib : $(HAIKU_JPEG_CURRENT_LINK) - : libjpeg.so : : true ; - # TODO: Remove when the packages have been rebuilt! AddSymlinkToPackage lib : libbe.so : liblocale.so ; diff --git a/build/jam/packages/HaikuDevel b/build/jam/packages/HaikuDevel index 46421dc2e2..9fbf97447e 100644 --- a/build/jam/packages/HaikuDevel +++ b/build/jam/packages/HaikuDevel @@ -71,8 +71,6 @@ AddHeaderDirectoryToPackage compatibility gnu : gnu ; AddHeaderDirectoryToPackage libs termcap : 3rdparty ; AddHeaderDirectoryToPackage libs tiff : 3rdparty ; -CopyDirectoryToPackage develop headers : $(HAIKU_JPEG_HEADERS_DEPENDENCY) - : 3rdparty : : isTarget ; # cpp headers if $(HAIKU_GCC_VERSION[1]) = 2 { # GCC 2 only -- for GCC 4 they come with the DevelopmentBase package diff --git a/src/add-ons/translators/jpeg/JPEGTranslator.cpp b/src/add-ons/translators/jpeg/JPEGTranslator.cpp index ab57fcb88e..d98ce777d1 100644 --- a/src/add-ons/translators/jpeg/JPEGTranslator.cpp +++ b/src/add-ons/translators/jpeg/JPEGTranslator.cpp @@ -31,8 +31,6 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "JPEGTranslator.h" -#include "TranslatorWindow.h" -#include "exif_parser.h" #include @@ -42,6 +40,11 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include +#include "be_jerror.h" +#include "exif_parser.h" +#include "TranslatorWindow.h" + + #undef B_TRANSLATION_CONTEXT #define B_TRANSLATION_CONTEXT "JPEGTranslator" @@ -953,7 +956,7 @@ JPEGTranslator::Compress(BPositionIO* in, BPositionIO* out, // Set basic things needed for jpeg writing struct jpeg_compress_struct cinfo; - struct jpeg_error_mgr jerr; + struct be_jpeg_error_mgr jerr; cinfo.err = be_jpeg_std_error(&jerr, fSettings, longJumpBuffer); jpeg_create_compress(&cinfo); be_jpeg_stdio_dest(&cinfo, out); @@ -1057,7 +1060,7 @@ JPEGTranslator::Decompress(BPositionIO* in, BPositionIO* out, // Set basic things needed for jpeg reading struct jpeg_decompress_struct cinfo; - struct jpeg_error_mgr jerr; + struct be_jpeg_error_mgr jerr; cinfo.err = be_jpeg_std_error(&jerr, fSettings, longJumpBuffer); jpeg_create_decompress(&cinfo); be_jpeg_stdio_src(&cinfo, in); diff --git a/src/add-ons/translators/jpeg/JPEGTranslator.h b/src/add-ons/translators/jpeg/JPEGTranslator.h index eee87a3ff4..ee2c93f920 100644 --- a/src/add-ons/translators/jpeg/JPEGTranslator.h +++ b/src/add-ons/translators/jpeg/JPEGTranslator.h @@ -191,15 +191,5 @@ class TranslatorView : public BTabView { EXTERN(void) be_jpeg_stdio_src(j_decompress_ptr cinfo, BPositionIO *infile); // from "be_jdatasrc.cpp" EXTERN(void) be_jpeg_stdio_dest(j_compress_ptr cinfo, BPositionIO *outfile); // from "be_jdatadst.cpp" -//--------------------------------------------------- -// Error output functions -// based on the one from jerror.c -// modified to use settings -// (so user can decide to show dialog-boxes or not) -//--------------------------------------------------- -EXTERN(struct jpeg_error_mgr *) be_jpeg_std_error (struct jpeg_error_mgr * err, - TranslatorSettings * settings, const jmp_buf* longJumpBuffer); - // implemented in "be_jerror.cpp" - #endif // _JPEGTRANSLATOR_H_ diff --git a/src/add-ons/translators/jpeg/Jamfile b/src/add-ons/translators/jpeg/Jamfile index d04e786e46..b1c70bd4ba 100644 --- a/src/add-ons/translators/jpeg/Jamfile +++ b/src/add-ons/translators/jpeg/Jamfile @@ -8,13 +8,13 @@ SubDirSysHdrs [ FDirName $(SUBDIR) $(DOTDOT) raw ] ; SubDirHdrs [ FDirName $(SUBDIR) $(DOTDOT) shared ] ; #for BaseTranslator.h and friends -UseHeaders $(HAIKU_JPEG_HEADERS) : true ; +UseBuildFeatureHeaders jpeg ; AddResources JPEGTranslator : JPEGTranslator.rdef ; -Includes [ FGristFiles be_jdatadst.cpp be_jdatasrc.cpp - be_jerror.cpp JPEGTranslator.cpp ] - : $(HAIKU_JPEG_HEADERS_DEPENDENCY) ; +Includes [ FGristFiles be_jdatadst.cpp be_jdatasrc.cpp be_jerror.cpp + JPEGTranslator.cpp ] + : [ BuildFeatureAttribute jpeg : headers ] ; Translator JPEGTranslator : be_jdatadst.cpp @@ -22,7 +22,8 @@ Translator JPEGTranslator : be_jerror.cpp exif_parser.cpp JPEGTranslator.cpp - : be translation libtranslatorsutils.a $(HAIKU_JPEG_LIB) + : be translation libtranslatorsutils.a + [ BuildFeatureAttribute jpeg : library ] $(TARGET_LIBSTDC++) $(HAIKU_LOCALE_LIBS) : true ; diff --git a/src/add-ons/translators/jpeg/be_jerror.cpp b/src/add-ons/translators/jpeg/be_jerror.cpp index fa5b8c29e5..6ed2787284 100644 --- a/src/add-ons/translators/jpeg/be_jerror.cpp +++ b/src/add-ons/translators/jpeg/be_jerror.cpp @@ -37,13 +37,14 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include "be_jerror.h" + // Be headers #include #include #include // JPEG headers -#include #include #include @@ -73,8 +74,10 @@ be_error_exit (j_common_ptr cinfo) fprintf(stderr, B_TRANSLATE("JPEG Library Error: %s\n"), buffer); + be_jpeg_error_mgr* errorManager + = static_cast(cinfo->err); jmp_buf longJumpBuffer; - memcpy(&longJumpBuffer, &(cinfo->err->long_jump_buffer), sizeof(jmp_buf)); + memcpy(&longJumpBuffer, errorManager->long_jump_buffer, sizeof(jmp_buf)); /* Let the memory manager delete any temp files before we die */ jpeg_destroy(cinfo); @@ -108,12 +111,12 @@ be_output_message (j_common_ptr cinfo) /* * Fill in the standard error-handling methods in a jpeg_error_mgr object. * Since Translator doesn't use it's own error table, we can use error_mgr's - * variables to store some usefull data. + * variables to store some useful data. * last_addon_message (as ShowReadWarnings) is used for storing SETTINGS->ShowReadWarningBox value */ GLOBAL(struct jpeg_error_mgr *) -be_jpeg_std_error (struct jpeg_error_mgr * err, TranslatorSettings* settings, +be_jpeg_std_error(be_jpeg_error_mgr* err, TranslatorSettings* settings, const jmp_buf* longJumpBuffer) { settings->Acquire(); @@ -123,7 +126,7 @@ be_jpeg_std_error (struct jpeg_error_mgr * err, TranslatorSettings* settings, err->output_message = be_output_message; err->ShowReadWarnings = settings->SetGetBool(JPEG_SET_SHOWREADWARNING, NULL); - memcpy(&(err->long_jump_buffer), longJumpBuffer, sizeof(jmp_buf)); + err->long_jump_buffer = longJumpBuffer; settings->Release(); return err; diff --git a/src/add-ons/translators/jpeg/be_jerror.h b/src/add-ons/translators/jpeg/be_jerror.h new file mode 100644 index 0000000000..dd2cb13b9f --- /dev/null +++ b/src/add-ons/translators/jpeg/be_jerror.h @@ -0,0 +1,28 @@ +/* + * Copyright 2013, Haiku, Inc. + * Distributed under the terms of the MIT License. + */ +#ifndef B_JERROR_H +#define B_JERROR_H + + +#include + // for jpeglib.h -- it doesn't seem to be self-contained +#include + +#include + + +class TranslatorSettings; + + +struct be_jpeg_error_mgr : jpeg_error_mgr { + const jmp_buf* long_jump_buffer; +}; + + +struct jpeg_error_mgr* be_jpeg_std_error(be_jpeg_error_mgr* err, + TranslatorSettings* settings, const jmp_buf* longJumpBuffer); + + +#endif // B_JERROR_H diff --git a/src/libs/tiff/Jamfile b/src/libs/tiff/Jamfile index 9d2f81601a..b0f6116e09 100644 --- a/src/libs/tiff/Jamfile +++ b/src/libs/tiff/Jamfile @@ -1,7 +1,7 @@ SubDir HAIKU_TOP src libs tiff ; UseLibraryHeaders tiff ; -UseHeaders $(HAIKU_JPEG_HEADERS) : true ; +UseBuildFeatureHeaders jpeg ; UseBuildFeatureHeaders zlib ; SubDirHdrs [ FDirName $(SUBDIR) $(DOTDOT) shared ] ; @@ -47,13 +47,16 @@ local shared_files = ; Includes [ FGristFiles tif_jpeg.c tif_ojpeg.c ] - : $(HAIKU_JPEG_HEADERS_DEPENDENCY) ; + : [ BuildFeatureAttribute jpeg : headers ] ; Includes [ FGristFiles tif_pixarlog.c tif_zip.c ] : [ BuildFeatureAttribute zlib : headers ] ; Objects $(shared_files) ; SharedLibrary libtiff.so : [ FGristFiles $(shared_files:S=.o) ] - : $(HAIKU_JPEG_LIB) [ BuildFeatureAttribute zlib : library ] : 3.8 ; + : + [ BuildFeatureAttribute jpeg : library ] + [ BuildFeatureAttribute zlib : library ] + : 3.8 ; StaticLibrary libtiff.a : [ FGristFiles $(shared_files:S=.o) ] ;