Thank you all so much for the great insights & references! Thanks to
Chas' sample project I got it all working now, so expect a few new lib
releases soon! Cheers, K.

On 14 February 2014 11:00, Chas Emerick <c...@cemerick.com> wrote:
> I've added a sample.project.clj file to the cljx repo and pointed to it from
> the README.  I can see how the confusion may have gotten started due to a
> particular detail in the example configuration snippet that was in the
> README, which is also fixed.
>
> If someone wants to submit a patch so that `lein cljx sample` dumps that to
> stdout (similar to `lein cljsbuild sample`), I'd be interested in that.
>
> Thanks,
>
> - Chas
>
>
> On 02/14/2014 05:26 AM, Dave Della Costa wrote:
>>
>> Hi Chas, thanks for the clarification--it was definitely not clear to me
>> how this worked so I appreciate the explanation.
>>
>> Regarding the PR, I suppose the same points you brought up here are
>> relevant there, since I proposed including my (mistaken) notion of how
>> source-paths work for cljx-based libs in the documentation there.
>>
>> So really the problem is a lack of knowledge about how leiningen works
>> when packaging up a jar.  However, despite the fact that this
>> information is not cljx-specific, it may be useful simply to re-state
>> what you've described in this email somewhere in the cljx docs for
>> clueless folks like myself, since obvious it's not clear what is
>> necessary configuration and what isn't...or else just provide a pointer
>> to the relevant leiningen docs (if they exist).
>>
>> In any case, thanks!
>>
>> DD
>>
>> (2014/02/14 19:14), Chas Emerick wrote:
>>>
>>> This isn't really right.  :source-paths are for your _sources_, not a
>>> place to drop in whatever paths you want either on the classpath or
>>> included in jar files, etc.  Also, all generated content should go into
>>> `target/*`, so that `lein clean` will have its intended effect
>>> (eliminating all artifacts of previous build / project mgmt activities).
>>>
>>> (Some tools [definitely Counterclockwise, perhaps other IDE plugins as
>>> well?] also use the value of :source-paths to configure go-to-definition
>>> operations and such, so including non-source directories in
>>> :source-paths will generally yield undesirable effects there.)
>>>
>>> When it builds jars, Leiningen includes resources from :source-paths,
>>> :resource-paths, and :compile-path; the latter is almost never
>>> customized, and defaults to "target/classes".
>>>
>>> So, you should put your cljx sources in :source-paths.  You should have
>>> cljx generate transformation results into some directory under
>>> `target/`. If you want to redistribute the results, you should either
>>> generate cljx results into `target/classes`, or investigate Leiningen's
>>> (plethora of) options for customizing jar contents; see e.g.
>>>
>>> https://github.com/technomancy/leiningen/blob/stable/sample.project.clj#L331
>>>
>>>
>>> FWIW, that isn't cljx-specific at all; the same applies to Clojure
>>> sources that are being AOT-compiled, and with a tweak, to Java sources
>>> to be javac-compiled.
>>>
>>> cljsbuild produces *JavaScript* output, so its configuration is never
>>> going to be relevant to whether or not ClojureScript resources produced
>>> by cljx can be consumed by downstream projects.
>>>
>>> Dave, thanks for the PR; I'll reply separately to that on github.
>>>
>>> - Chas
>>>
>>> On 02/13/2014 10:06 PM, Dave Della Costa wrote:
>>>>
>>>> Hi Karsten,
>>>>
>>>> Strangely, I was doing the exact same thing as you yesterday and
>>>> struggled for a bit until I found settings that work.
>>>>
>>>> I achieved success when I used the configuration from Cornice as a
>>>> template:
>>>>
>>>> https://github.com/rkneufeld/cornice/blob/master/project.clj
>>>>
>>>> ...with one exception, my cljsbuild config contained only
>>>>
>>>> :cljsbuild {:builds [{:source-paths ["target/generated/cljs"]}]}
>>>>
>>>> vs. all the extra jar config and one not.  If I recall correctly, I was
>>>> getting the "java.util.zip.ZipException: duplicate entry" you mention
>>>> until I removed the extra settings in cljsbuild.
>>>>
>>>> Looking at your config I also suspect you want
>>>>
>>>>> :source-paths ["src-cljs"]
>>>>
>>>> instead of
>>>>
>>>>> :source-paths ["src-clj" "src-cljs"]
>>>>
>>>> in your cljsbuild config.
>>>>
>>>> However, when I leave the cljsbuild configuration out completely, it
>>>> seems to have no bearing on whether or not I can use the generated cljs
>>>> files when including the library in another project.  I suspect the
>>>> ":jar true" setting is only relevant if you have strictly cljs files
>>>> that need to be included--it seems like cljx has its own orthogonal
>>>> build process which automatically includes cljs files in the jar file
>>>> but I haven't dug into the code yet to confirm.  This is just based on
>>>> testing what happens when I tweak config settings (Kevin or Chas please
>>>> let me know if I'm off-base here).
>>>>
>>>> What does seem to make all the difference is the sourcepaths settings,
>>>> which it doesn't seem you have:
>>>>
>>>> :source-paths ["src" "target/generated-src/clj"
>>>> "target/generated-src/cljs"]
>>>>
>>>> I needed this before I could see the clj/cljs files getting included in
>>>> my library jar.
>>>>
>>>> Obviously, adjust all paths to fit your specific configuration.
>>>>
>>>> I've made a pull request to add a bit of further explanation on using
>>>> cljx in libraries, as it would be helpful if this didn't require looking
>>>> up how others had done it to figure it out!
>>>>
>>>> https://github.com/lynaghk/cljx/pull/30
>>>>
>>>> Hope this helps--
>>>>
>>>> Best,
>>>> Dave
>>>>
>>>> (2014/02/13 20:22), Karsten Schmidt wrote:
>>>>>
>>>>> I've been busy working on a few libraries targetting both Clojure &
>>>>> ClojureScript, however so far have only tested the CLJ side and now
>>>>> that
>>>>> it comes to addressing CLJS am running in circles (and on fumes)
>>>>> unsuccessfully trying to tweak my project settings to make things work.
>>>>>
>>>>> All my source is using CLJX stored in the the "src-cljx" folder. My
>>>>> rules then trigger generated sources into "src-clj" (for all Clojure
>>>>> and
>>>>> shared macros) and "src-cljs" for CLJS parts only.
>>>>>
>>>>> My project.clj is as follows:
>>>>>
>>>>> (defproject foo "0.1.0-SNAPSHOT"
>>>>>     :dependencies [[org.clojure/clojure "1.5.1"]
>>>>>                    [org.clojure/clojurescript "0.0-2156"]]
>>>>>       :jar-exclusions [#"\.cljx|\.DS_Store|\.js|\.html"]
>>>>>
>>>>>     :cljx {:builds [{:source-paths ["src-cljx"]
>>>>>                      :output-path "src-clj"
>>>>>                      :rules :clj}
>>>>>                     {:source-paths ["src-cljx"]
>>>>>                      :output-path "src-cljs"
>>>>>                      :rules :cljs}]}
>>>>>
>>>>>     :cljsbuild {:builds
>>>>>                 [{:id "dev"
>>>>>                   :source-paths ["src-clj" "src-cljs"]
>>>>>                   :compiler
>>>>>                   {:pretty-print true
>>>>>                    :output-to "foo-0.1.0-SNAPSHOT.js"
>>>>>                    :optimizations :simple}
>>>>>                   :jar true}]}
>>>>>
>>>>>     :plugins [[com.keminglabs/cljx "0.3.2"]
>>>>>               [lein-cljsbuild "1.0.2"]]
>>>>>     :hooks [cljx.hooks leiningen.cljsbuild])
>>>>>
>>>>> I can successfully create a JAR from this with `lein install`, however
>>>>> if I try to use this library as dependency in another CLJS project,
>>>>> none
>>>>> of the namespaces of this dependency seem to be found, even though I
>>>>> verified that they're present in the JAR (contains both .clj & .cljs
>>>>> versions).
>>>>>
>>>>> So I then assumed the reasons for this are the non-standard names for
>>>>> the source folders. But adding this line at the root level of
>>>>> project.clj will not work either and makes `lein install` fail with a
>>>>> "java.util.zip.ZipException: duplicate entry":
>>>>>
>>>>> :source-paths ["src-clj" "src-cljs"]
>>>>>
>>>>> Therefore can someone please explain or point me to a correct project
>>>>> setup to make this work? I've been trying to find answers on SO &
>>>>> Google, but it seems this (strangely?) isn't a popular use case and I
>>>>> couldn't find any helpful answers.
>>>>>
>>>>> Once this is solved am happy to write up a short tutorial or create a
>>>>> lein template for future reference.
>>>>>
>>>>> Thank you!
>>>>> K.
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "Clojure" group.
>>>>> To post to this group, send email to clojure@googlegroups.com
>>>>> Note that posts from new members are moderated - please be patient with
>>>>> your first post.
>>>>> To unsubscribe from this group, send email to
>>>>> clojure+unsubscr...@googlegroups.com
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/group/clojure?hl=en
>>>>> ---
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "Clojure" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to clojure+unsubscr...@googlegroups.com.
>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> --- You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.



-- 
Karsten Schmidt
http://postspectacular.com | http://toxiclibs.org | http://toxi.co.uk

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to