Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 7 Nov 2013 14:00:45 +0000 (UTC)
From:      Tijl Coosemans <tijl@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r333100 - in head/graphics/openshadinglanguage: . files
Message-ID:  <201311071400.rA7E0jYq004413@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: tijl
Date: Thu Nov  7 14:00:44 2013
New Revision: 333100
URL: http://svnweb.freebsd.org/changeset/ports/333100

Log:
  - Import patches from upstream to fix build on FreeBSD 10 (clang, libc++)
  - Depend on llvm33 and clang33.
  - New LIB_DEPENDS syntax.
  - Staging.
  - Replace some patches with Makefile magic.
  
  PR:		ports/180190, ports/180650
  Submitted by:	Shane Ambler <FreeBSD@ShaneWare.Biz> (maintainer)

Added:
  head/graphics/openshadinglanguage/files/patch-CMakeLists.txt   (contents, props changed)
  head/graphics/openshadinglanguage/files/patch-liboslcomp__CMakeLists.txt   (contents, props changed)
  head/graphics/openshadinglanguage/files/patch-liboslcomp__oslcomp.cpp   (contents, props changed)
  head/graphics/openshadinglanguage/files/patch-liboslexec__constfold.cpp   (contents, props changed)
  head/graphics/openshadinglanguage/files/patch-liboslexec__dictionary.cpp   (contents, props changed)
  head/graphics/openshadinglanguage/files/patch-liboslexec__llvm_gen.cpp   (contents, props changed)
  head/graphics/openshadinglanguage/files/patch-liboslexec__llvm_instance.cpp   (contents, props changed)
  head/graphics/openshadinglanguage/files/patch-liboslexec__runtimeoptimize.h   (contents, props changed)
Deleted:
  head/graphics/openshadinglanguage/files/patch-cmake_platform.cmake
  head/graphics/openshadinglanguage/files/patch-liboslexec__CMakeLists.txt
  head/graphics/openshadinglanguage/files/patch-liboslexec__llvm_ops.cpp
Modified:
  head/graphics/openshadinglanguage/Makefile

Modified: head/graphics/openshadinglanguage/Makefile
==============================================================================
--- head/graphics/openshadinglanguage/Makefile	Thu Nov  7 13:55:25 2013	(r333099)
+++ head/graphics/openshadinglanguage/Makefile	Thu Nov  7 14:00:44 2013	(r333100)
@@ -3,7 +3,7 @@
 
 PORTNAME=	openshadinglanguage
 PORTVERSION=	1.3.3
-PORTREVISION=	1
+PORTREVISION=	2
 CATEGORIES=	graphics devel
 
 MAINTAINER=	FreeBSD@Shaneware.biz
@@ -11,12 +11,12 @@ COMMENT=	Advanced shading language for p
 
 LICENSE=	BSD
 
-BUILD_DEPENDS=	llvm>=3.1:${PORTSDIR}/devel/llvm \
-		flex>=2.5.37:${PORTSDIR}/textproc/flex
-LIB_DEPENDS=	boost_thread:${PORTSDIR}/devel/boost-libs \
-		IlmImf:${PORTSDIR}/graphics/OpenEXR \
-		OpenImageIO:${PORTSDIR}/graphics/openimageio
-RUN_DEPENDS=	llvm>=3.1:${PORTSDIR}/devel/llvm
+BUILD_DEPENDS=	llvm-config33:${PORTSDIR}/devel/llvm33 \
+		clang33>=3.3_3:${PORTSDIR}/lang/clang33
+LIB_DEPENDS=	libboost_thread.so:${PORTSDIR}/devel/boost-libs \
+		libIlmImf.so:${PORTSDIR}/graphics/OpenEXR \
+		libOpenImageIO.so:${PORTSDIR}/graphics/openimageio
+RUN_DEPENDS=	llvm-config33:${PORTSDIR}/devel/llvm33
 
 USE_GITHUB=	yes
 GH_ACCOUNT=	imageworks
@@ -26,27 +26,30 @@ GH_COMMIT=	18671dc
 
 WRKSRC=		${WRKDIR}/imageworks-OpenShadingLanguage-${GH_COMMIT}/src
 
-CMAKE_ARGS=	-DFLEX_EXECUTABLE:STRING=${LOCALBASE}/bin/flex \
-		-DUSE_TBB:BOOL=OFF
-CXXFLAGS+=	-I${LOCALBASE}/include/flex
+CMAKE_ARGS=	-DLLVM_CONFIG:STRING="${LOCALBASE}/bin/llvm-config33"
 USE_LDCONFIG=	yes
 USES=		bison cmake:outsource
 
-NO_STAGE=	yes
-.include <bsd.port.pre.mk>
+.include <bsd.port.options.mk>
 
-.if ${OSVERSION} < 900000
-BUILD_DEPENDS+=	clang:${PORTSDIR}/lang/clang
+.if ${ARCH} == i386 && ! ${MACHINE_CPU:Mi586}
+IGNORE=		CPUTYPE must be i586 or higher in /etc/make.conf
 .endif
 
-.if ${ARCH} == i386
-CFLAGS+=	-march=i586
+.if ${OSVERSION} < 1000033
+BUILD_DEPENDS+=	flex>=2.5.37:${PORTSDIR}/textproc/flex
+CMAKE_ARGS+=	-DFLEX_EXECUTABLE:STRING=${LOCALBASE}/bin/flex
+CXXFLAGS+=	-I${LOCALBASE}/include/flex
 .endif
 
+post-patch:
+	@${REINPLACE_CMD} -e 's,/bin/bash,/bin/sh,' \
+		${WRKSRC}/liboslexec/serialize-bc.bash
+
 post-install:
 .for LNAME in oslcomp oslexec oslquery testshade
-	cd ${PREFIX}/lib && ${MV} -f lib${LNAME}.so lib${LNAME}.so.1
-	cd ${PREFIX}/lib && ${LN} -sf lib${LNAME}.so.1 lib${LNAME}.so
+	${MV} ${STAGEDIR}${PREFIX}/lib/lib${LNAME}.so ${STAGEDIR}${PREFIX}/lib/lib${LNAME}.so.1
+	${LN} -s lib${LNAME}.so.1 ${STAGEDIR}${PREFIX}/lib/lib${LNAME}.so
 .endfor
 
-.include <bsd.port.post.mk>
+.include <bsd.port.mk>

Added: head/graphics/openshadinglanguage/files/patch-CMakeLists.txt
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/graphics/openshadinglanguage/files/patch-CMakeLists.txt	Thu Nov  7 14:00:44 2013	(r333100)
@@ -0,0 +1,86 @@
+--- CMakeLists.txt.orig	2013-07-12 01:01:18.000000000 +0200
++++ CMakeLists.txt	2013-11-05 21:12:26.000000000 +0100
+@@ -9,10 +9,8 @@
+ set (OSO_FILE_VERSION_MAJOR 1)
+ set (OSO_FILE_VERSION_MINOR 0)
+ 
+-cmake_minimum_required (VERSION 2.6)
+-if (NOT CMAKE_VERSION VERSION_LESS 2.8.4)
+-    cmake_policy (SET CMP0017 NEW)
+-endif ()
++cmake_minimum_required (VERSION 2.8.7)
++cmake_policy (SET CMP0017 NEW)
+ set (CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS TRUE)
+ message (STATUS "Project source dir = ${PROJECT_SOURCE_DIR}")
+ message (STATUS "Project build dir = ${CMAKE_BINARY_DIR}")
+@@ -21,6 +19,8 @@
+     message (FATAL_ERROR "Not allowed to run in-source build!")
+ endif ()
+ 
++include (CheckCXXSymbolExists)
++
+ if (NOT CMAKE_BUILD_TYPE)
+     set (CMAKE_BUILD_TYPE "Release")
+ endif ()
+@@ -42,12 +42,11 @@
+                      OUTPUT_STRIP_TRAILING_WHITESPACE)
+     message (STATUS "Using gcc ${GCC_VERSION} as the compiler")
+ endif ()
+-if (NOT CMAKE_COMPILER_IS_CLANG)
+-    string (REGEX MATCH clang CMAKE_COMPILER_IS_CLANG ${CMAKE_CXX_COMPILER})
+-    if (CMAKE_COMPILER_IS_CLANG)
+-        set (CMAKE_COMPILER_IS_CLANG 1)
+-        message (STATUS "Using clang as the compiler")
+-    endif ()
++
++message (STATUS "CMAKE_CXX_COMPILER_ID is ${CMAKE_CXX_COMPILER_ID}")
++if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
++    set (CMAKE_COMPILER_IS_CLANG 1)
++    message (STATUS "Using clang as the compiler")
+ endif ()
+ 
+ ## turn on more detailed warnings and consider warnings as errors
+@@ -121,6 +120,10 @@
+     endif ()
+ endif ()
+ 
++# Try to detect libc++, in which case we should force use of Boost
++# Wave (because that avoids a nonstandard g++ extension in the other
++# code path).
++check_cxx_symbol_exists(_LIBCPP_VERSION string OSL_SYSTEM_HAS_LIBCPP)
+ 
+ set (VERBOSE OFF CACHE BOOL "Print lots of messages while compiling")
+ set (BUILDSTATIC OFF CACHE BOOL "Build static library instead of shared")
+@@ -129,12 +132,16 @@
+      "Use an externally built shared library version of the pugixml library")
+ set (PUGIXML_HOME "" CACHE STRING "Hint about where to find external PugiXML library")
+ if (WIN32)
+-    set (USE_BOOST_WAVE ON CACHE BOOL "Use Boost Wave as preprocessor")
+     set (USE_LLVM_BITCODE OFF CACHE BOOL "Generate embedded LLVM bitcode")
+ else ()
+-    set (USE_BOOST_WAVE OFF CACHE BOOL "Use Boost Wave as preprocessor")
+     set (USE_LLVM_BITCODE ON CACHE BOOL "Generated embedded LLVM bitcode")
+ endif ()
++if (WIN32 OR OSL_SYSTEM_HAS_LIBCPP)
++    set (USE_BOOST_WAVE ON CACHE BOOL "Use Boost Wave as preprocessor")
++else ()
++    set (USE_BOOST_WAVE OFF CACHE BOOL "Use Boost Wave as preprocessor")
++endif ()
++
+ set (USE_PARTIO ON CACHE BOOL "Use Partio if found")
+ 
+ if (LLVM_NAMESPACE)
+@@ -149,6 +156,13 @@
+     add_definitions ("${EXTRA_CPP_DEFINITIONS}")
+ endif()
+ 
++if (USE_BOOST_WAVE)
++    add_definitions ("-DUSE_BOOST_WAVE")
++endif ()
++
++if (CMAKE_COMPILER_IS_CLANG AND OSL_SYSTEM_HAS_LIBCPP)
++    message (STATUS "Using libc++")
++endif ()
+ 
+ set (CMAKE_MODULE_PATH
+      "${PROJECT_SOURCE_DIR}/cmake/modules"

Added: head/graphics/openshadinglanguage/files/patch-liboslcomp__CMakeLists.txt
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/graphics/openshadinglanguage/files/patch-liboslcomp__CMakeLists.txt	Thu Nov  7 14:00:44 2013	(r333100)
@@ -0,0 +1,9 @@
+--- ./liboslcomp/CMakeLists.txt.orig	2013-07-12 08:31:18.000000000 +0930
++++ ./liboslcomp/CMakeLists.txt	2013-11-03 18:07:25.644118883 +1030
+@@ -29,6 +29,3 @@
+     INSTALL ( TARGETS oslcomp LIBRARY DESTINATION lib )
+ endif ()
+ 
+-IF ( USE_BOOST_WAVE )
+-    ADD_DEFINITIONS ( -DUSE_BOOST_WAVE )
+-ENDIF ()

Added: head/graphics/openshadinglanguage/files/patch-liboslcomp__oslcomp.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/graphics/openshadinglanguage/files/patch-liboslcomp__oslcomp.cpp	Thu Nov  7 14:00:44 2013	(r333100)
@@ -0,0 +1,20 @@
+--- ./liboslcomp/oslcomp.cpp.orig	2013-07-12 08:31:18.000000000 +0930
++++ ./liboslcomp/oslcomp.cpp	2013-11-03 18:07:25.646119281 +1030
+@@ -32,7 +32,7 @@
+ #include <fstream>
+ #include <cstdio>
+ #include <streambuf>
+-#ifdef __GNUC__
++#if defined(__GNUC__) && !defined(_LIBCPP_VERSION) && !defined(USE_BOOST_WAVE)
+ # include <ext/stdio_filebuf.h>
+ #endif
+ #include <cstdio>
+@@ -268,7 +268,7 @@
+     // std::cout << "cpp command:\n>" << cppcommand << "<\n";
+     FILE *cpppipe = popen (cppcommand.c_str(), "r");
+ 
+-#ifdef __GNUC__
++#if defined(__GNUC__) && !defined(_LIBCPP_VERSION)
+     __gnu_cxx::stdio_filebuf<char> fb (cpppipe, std::ios::in);
+ #else
+     std::filebuf fb (cpppipe);

Added: head/graphics/openshadinglanguage/files/patch-liboslexec__constfold.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/graphics/openshadinglanguage/files/patch-liboslexec__constfold.cpp	Thu Nov  7 14:00:44 2013	(r333100)
@@ -0,0 +1,42 @@
+--- ./liboslexec/constfold.cpp.orig	2013-07-12 08:31:18.000000000 +0930
++++ ./liboslexec/constfold.cpp	2013-11-03 18:07:25.648118961 +1030
+@@ -882,19 +882,22 @@
+ {
+     Opcode &op (rop.inst()->ops()[opnum]);
+     // Symbol &R (*rop.inst()->argsymbol(op.firstarg()+0));
+-    Symbol &Str (*rop.inst()->argsymbol(op.firstarg()+1));
+-    Symbol &Results (*rop.inst()->argsymbol(op.firstarg()+2));
+-    Symbol &Sep (*rop.inst()->argsymbol(op.firstarg()+3));
+-    Symbol &Maxsplit (*rop.inst()->argsymbol(op.firstarg()+4));
+-    if (Str.is_constant() && Sep.is_constant() && Maxsplit.is_constant()) {
++    Symbol &Str (*rop.opargsym (op, 1));
++    Symbol &Results (*rop.opargsym (op, 2));
++    Symbol *Sep (rop.opargsym (op, 3));
++    Symbol *Maxsplit (rop.opargsym (op, 4));
++    if (Str.is_constant() && (!Sep || Sep->is_constant()) &&
++                             (!Maxsplit || Maxsplit->is_constant())) {
+         // The split string, separator string, and maxsplit are all constants.
+         // Compute the results with Strutil::split.
+         int resultslen = Results.typespec().arraylength();
+-        int maxsplit = Imath::clamp (*(int *)Maxsplit.data(), 0, resultslen);
++        int maxsplit = Maxsplit ? *(int *)Maxsplit->data() : resultslen;
++        maxsplit = std::min (maxsplit, resultslen);
+         std::vector<std::string> splits;
++        ustring sep = Sep ? (*(ustring *)Sep->data()) : ustring("");
+         Strutil::split ((*(ustring *)Str.data()).string(), splits,
+-                        (*(ustring *)Sep.data()).string(), maxsplit);
+-        int n = std::min (maxsplit, (int)splits.size());
++                        sep.string(), maxsplit);
++        int n = std::min (std::max(0,maxsplit), (int)splits.size());
+         // Temporarily stash the index of the symbol holding results
+         int resultsarg = rop.inst()->args()[op.firstarg()+2];
+         // Turn the 'split' into a straight assignment of the return value...
+@@ -1337,7 +1340,7 @@
+             *(const float *)Y.data() == 2.0f) {
+         // Turn x^2 into x*x, even if x is not constant
+         static ustring kmul("mul");
+-        op.reset (kmul, 2);
++        op.reset (kmul, 3);
+         rop.inst()->args()[op.firstarg()+2] = rop.inst()->args()[op.firstarg()+1];
+         return 1;
+     }

Added: head/graphics/openshadinglanguage/files/patch-liboslexec__dictionary.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/graphics/openshadinglanguage/files/patch-liboslexec__dictionary.cpp	Thu Nov  7 14:00:44 2013	(r333100)
@@ -0,0 +1,11 @@
+--- ./liboslexec/dictionary.cpp.orig	2013-07-12 08:31:18.000000000 +0930
++++ ./liboslexec/dictionary.cpp	2013-11-03 18:07:25.650119434 +1030
+@@ -50,7 +50,7 @@
+ namespace pvt {   // OSL::pvt
+ 
+ 
+-#ifndef USE_EXTERNAL_PUGIXML
++#ifdef USING_OIIO_PUGI
+ namespace pugi = OIIO::pugi;
+ #endif
+ 

Added: head/graphics/openshadinglanguage/files/patch-liboslexec__llvm_gen.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/graphics/openshadinglanguage/files/patch-liboslexec__llvm_gen.cpp	Thu Nov  7 14:00:44 2013	(r333100)
@@ -0,0 +1,11 @@
+--- ./liboslexec/llvm_gen.cpp.orig	2013-07-12 08:31:18.000000000 +0930
++++ ./liboslexec/llvm_gen.cpp	2013-11-03 18:07:25.652119256 +1030
+@@ -3310,7 +3310,7 @@
+     Symbol& Results = *rop.opargsym (op, 2);
+     DASSERT (R.typespec().is_int() && Str.typespec().is_string() &&
+              Results.typespec().is_array() &&
+-             Results.typespec().simpletype() == TypeDesc::TypeString);
++             Results.typespec().is_string_based());
+ 
+     llvm::Value *args[5];
+     args[0] = rop.llvm_load_value (Str);

Added: head/graphics/openshadinglanguage/files/patch-liboslexec__llvm_instance.cpp
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/graphics/openshadinglanguage/files/patch-liboslexec__llvm_instance.cpp	Thu Nov  7 14:00:44 2013	(r333100)
@@ -0,0 +1,11 @@
+--- ./liboslexec/llvm_instance.cpp.orig	2013-07-12 08:31:18.000000000 +0930
++++ ./liboslexec/llvm_instance.cpp	2013-11-03 18:07:25.654119237 +1030
+@@ -809,7 +809,7 @@
+ {
+     // Make a layer function: void layer_func(ShaderGlobals*, GroupData*)
+     // Note that the GroupData* is passed as a void*.
+-    std::string unique_layer_name = Strutil::format ("%s_%d", inst()->layername().c_str(), inst()->id());
++    std::string unique_layer_name = Strutil::format ("%s_%d", inst()->layername(), inst()->id());
+ 
+     m_layer_func = llvm::cast<llvm::Function>(m_llvm_module->getOrInsertFunction(unique_layer_name,
+                     llvm_type_void(), llvm_type_sg_ptr(),

Added: head/graphics/openshadinglanguage/files/patch-liboslexec__runtimeoptimize.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/graphics/openshadinglanguage/files/patch-liboslexec__runtimeoptimize.h	Thu Nov  7 14:00:44 2013	(r333100)
@@ -0,0 +1,32 @@
+--- ./liboslexec/runtimeoptimize.h.orig	2013-07-12 08:31:18.000000000 +0930
++++ ./liboslexec/runtimeoptimize.h	2013-11-03 18:07:25.656119123 +1030
+@@ -345,7 +345,8 @@
+     /// Helper: return the ptr to the symbol that is the argnum-th
+     /// argument to the given op.
+     Symbol *opargsym (const Opcode &op, int argnum) {
+-        return inst()->argsymbol (op.firstarg()+argnum);
++        return (argnum < op.nargs()) ?
++                    inst()->argsymbol (op.firstarg()+argnum) : NULL;
+     }
+ 
+     /// Create an llvm function for the whole shader group, JIT it,
+@@ -826,7 +827,7 @@
+     ///
+     llvm::BasicBlock *llvm_exit_instance_block () {
+         if (! m_exit_instance_block) {
+-            std::string name = Strutil::format ("%s_%d_exit_", inst()->layername().c_str(), inst()->id());
++            std::string name = Strutil::format ("%s_%d_exit_", inst()->layername(), inst()->id());
+             m_exit_instance_block = llvm_new_basic_block (name);
+         }
+         return m_exit_instance_block;
+@@ -887,8 +888,8 @@
+     int m_local_unknown_message_sent;   ///< Non-const setmessage in this inst
+     std::vector<ustring> m_local_messages_sent; ///< Messages set in this inst
+     std::vector<int> m_bblockids;       ///< Basic block IDs for each op
+-    std::vector<bool> m_in_conditional; ///< Whether each op is in a cond
+-    std::vector<bool> m_in_loop;        ///< Whether each op is in a loop
++    std::vector<char> m_in_conditional; ///< Whether each op is in a cond
++    std::vector<char> m_in_loop;        ///< Whether each op is in a loop
+     std::vector<int> m_layer_remap;     ///< Remapping of layer ordering
+     std::set<int> m_layers_already_run; ///< List of layers run
+     int m_num_used_layers;              ///< Number of layers actually used



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201311071400.rA7E0jYq004413>